Reasoning Details

 < Module exactEval:translation.
 < Prove_Constraint exactEval:host:proj_expr_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_expr_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_expr_other.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmt_other.

Proof completed.
 < Prove_Constraint exactEval:host:proj_fun_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_fun_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_param_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_param_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_program_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_program_is.

Proof completed.
 < Prove_Constraint exactEval:host:proj_typ_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_typ_is.

Proof completed.
 < Add_Proj_Rel exactEval:host:is_expr,
   exactEval:host:is_args,
   exactEval:host:is_recFieldExprs,
   exactEval:host:is_stmt.

Proof completed.
 < Prove_Ext_Ind exactEval:host:is_expr,
   exactEval:host:is_args,
   exactEval:host:is_recFieldExprs,
   exactEval: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 exactEval:host:is_args_nilArgs_or_consArgs.

Proof completed.
 < Prove exactEval:host:is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs.

Proof completed.
 < Prove exactEval:host:vars_unique.

Proof completed.
 < Prove exactEval:host:vars_is.

Proof completed.
 < Prove exactEval:host:vars_exist,
         exactEval:host:varsArgs_exist,
         exactEval:host:varsRecFields_exist.

Proof completed.
 < Prove exactEval:host:stmtNames_is,
         exactEval:host:stmtNames_isCtx,
         exactEval:host:exprNames_is.

Proof completed.
 < Prove exactEval:host:stmtNames_unique,
         exactEval:host:exprNames_unique.

Proof completed.
 < Prove exactEval:host:stmtNames_keep_older.

Proof completed.
 < Prove exactEval:host:stmtNames_exists,
         exactEval:host:exprNames_exists,
         exactEval:host:argsNames_exists,
         exactEval:host:recFieldNames_exists.

Proof completed.
 < Prove exactEval:host:stmtNames_not_in_ctx,
         exactEval:host:exprNames_not_in_ctx.

Proof completed.
 < Prove exactEval:host:stmtNames_relatedCtxs,
         exactEval:host:stmtNames_relatedCtxs_ctx_fwd,
         exactEval:host:stmtNames_relatedCtxs_ctx_back,
         exactEval:host:exprNames_relatedCtxs.

Proof completed.
 < Prove exactEval:host:stmtNames_increaseCtxs,
         exactEval:host:stmtNames_increaseCtxs_ctxs,
         exactEval:host:exprNames_increaseCtxs.

Proof completed.
 < Prove_Constraint exactEval:host:proj_exprNames.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames_names_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_stmtNames_names_backward.

Proof completed.
 < Prove exactEval:host:typeOf_isTy,
         exactEval:host:stmtOK_isCtx.

Proof completed.
 < Prove exactEval:host:stmtOK_keep_scopes.

Proof completed.
 < Prove exactEval:host:stmtOK_older_scopes_same.

Proof completed.
 < Prove exactEval:host:stmtOK_first_scope_lookup_same.

Proof completed.
 < Prove exactEval:host:typeOf_unique,
         exactEval:host:stmtOK_unique.

Proof completed.
 < Prove exactEval:host:paramTy_is.

Proof completed.
 < Prove exactEval:host:getFunInfo_is.

Proof completed.
 < Prove exactEval:host:paramTy_exists.

Proof completed.
 < Prove exactEval:host:getFunInfo_exists.

Proof completed.
 < Prove exactEval:host:evalExpr_isCtx,
         exactEval:host:evalExpr_isValue,
         exactEval:host:evalStmt_isCtx,
         exactEval:host:evalArgs_isCtx,
         exactEval:host:evalArgs_isValue,
         exactEval:host:evalRecFields_isCtx,
         exactEval:host:evalRecFields_isValue.

Proof completed.
 < Prove exactEval:host:evalExpr_isOutput,
         exactEval:host:evalStmt_isOutput,
         exactEval:host:evalArgs_isOutput,
         exactEval:host:evalRecFields_isOutput.

Proof completed.
 < Prove exactEval:host:paramName_is.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_is.

Proof completed.
 < Prove exactEval:host:evalProgram_isOutput.

Proof completed.
 < Prove exactEval:host:evalExpr_names_same,
         exactEval:host:evalStmt_names_same,
         exactEval:host:evalArgs_names_same,
         exactEval:host:evalRecFields_names_same.

Proof completed.
 < Prove exactEval:host:evalExpr_newNameScopes,
         exactEval:host:evalExpr_newNameScopes_output,
         exactEval:host:evalExpr_newNameScopes_ctx,
         exactEval:host:evalStmt_newNameScopes_output,
         exactEval:host:evalStmt_newNameScopes,
         exactEval:host:evalArgs_newNameScopes,
         exactEval:host:evalArgs_newNameScopes_output,
         exactEval:host:evalArgs_newNameScopes_ctx,
         exactEval:host:evalRecFields_newNameScopes,
         exactEval:host:evalRecFields_newNameScopes_output,
         exactEval:host:evalRecFields_newNameScopes_ctx.

Proof completed.
 < Add_Ext_Size exactEval:host:evalExpr,
   exactEval:host:evalArgs,
   exactEval:host:evalRecFields,
   exactEval:host:evalStmt.

Proof completed.
 < Add_Proj_Rel exactEval:host:evalExpr,
   exactEval:host:evalArgs,
   exactEval:host:evalRecFields,
   exactEval:host:evalStmt.

Proof completed.
 < Prove exactEval:host:evalExpr_newNameScopes_exists_ES,
         exactEval:host:evalStmt_newNameScopes_exists_ES,
         exactEval:host:evalArgs_newNameScopes_exists_ES,
         exactEval:host:evalRecFields_newNameScopes_exists_ES.

Proof completed.
 < Prove exactEval:host:evalExpr_ctx_names,
         exactEval:host:evalStmt_ctx_names,
         exactEval:host:evalArgs_ctx_names,
         exactEval:host:evalRecFields_ctx_names.

Proof completed.
 < Prove exactEval:host:evalExpr_newNameScopes_exists_back,
         exactEval:host:evalStmt_newNameScopes_exists_back,
         exactEval:host:evalArgs_newNameScopes_exists_back,
         exactEval:host:evalRecFields_newNameScopes_exists_back.

Proof completed.
 < Prove exactEval:host:evalExpr_scopes_same,
         exactEval:host:evalExpr_scopes_same_ctx,
         exactEval:host:evalStmt_scopes_same,
         exactEval:host:evalStmt_scopes_same_ctx,
         exactEval:host:evalArgs_scopes_same,
         exactEval:host:evalArgs_scopes_same_ctx,
         exactEval:host:evalRecFields_scopes_same,
         exactEval:host:evalRecFields_scopes_same_ctx.

Proof completed.
 < Prove exactEval:host:evalExpr_scopes_same_exists,
         exactEval:host:evalStmt_scopes_same_exists,
         exactEval:host:evalArgs_scopes_same_exists,
         exactEval:host:evalRecFields_scopes_same_exists.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalExpr_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalExpr_backward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalStmt_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalStmt_backward.

Proof completed.
 < Prove_Ext_Ind exactEval:host:evalExpr,
   exactEval:host:evalArgs,
   exactEval:host:evalRecFields,
   exactEval:host:evalStmt.

Proof completed.
 < Prove exactEval:host:paramName_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_paramName_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_paramName_back.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_getFunEvalInfo_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_getFunEvalInfo_back.

Proof completed.
 < Prove exactEval:host:evalProgram_unique.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalProgram_forward.

Proof completed.
 < Prove_Constraint exactEval:host:proj_evalProgram_back.

Proof completed.
 < Prove exactEval:host:evalExpr_typePres_ctx,
         exactEval:host:evalExpr_typePres,
         exactEval:host:evalStmt_typePres,
         exactEval:host:evalArgs_typePres_Ctx,
         exactEval:host:evalArgs_typePres,
         exactEval:host:evalRecFields_typePres_Ctx,
         exactEval:host:evalRecFields_typePres.

Proof completed.
 < Prove exactEval:host:paramTy_paramName_same.

Proof completed.
 < Prove exactEval:host:funOK_getFunEvalInfo_related.

Proof completed.
 < Prove exactEval:host:evalExpr_output_forms,
         exactEval:host:evalStmt_output_forms,
         exactEval:host:evalArgs_output_forms,
         exactEval:host:evalRecFields_output_forms.

Proof completed.
 < Prove exactEval:host:evalProgram_output_forms.

Proof completed.
 < Prove exactEval:host:paramName_exists.

Proof completed.
 < Prove exactEval:host:getFunEvalInfo_exists.

Proof completed.
 < Theorem join_is :
     forall L J,
       is_list (is_list is_string) L -> join L J -> is_list is_string J.

============================
 forall L J, is_list (is_list is_string) L -> join L J -> is_list is_string J
 < induction on 2.

IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
============================
 forall L J, is_list (is_list is_string) L -> join L J @ -> is_list is_string J
 < intros Is J.

Variables: L J
IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
Is : is_list (is_list is_string) L
J : join L J @
============================
 is_list is_string J
 < J: case J.

Subgoal 1:

IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
Is : is_list (is_list is_string) []
============================
 is_list is_string []
 < search.

Subgoal 2:

Variables: J Rest SRest S
IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
Is : is_list (is_list is_string) (S::SRest)
J : join SRest Rest *
J1 : S ++ Rest = J
============================
 is_list is_string J
 < case Is.

Subgoal 2:

Variables: J Rest SRest S
IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
J : join SRest Rest *
J1 : S ++ Rest = J
H1 : is_list is_string S
H2 : is_list (is_list is_string) SRest
============================
 is_list is_string J
 < apply IH to _ J.

Subgoal 2:

Variables: J Rest SRest S
IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
J : join SRest Rest *
J1 : S ++ Rest = J
H1 : is_list is_string S
H2 : is_list (is_list is_string) SRest
H3 : is_list is_string Rest
============================
 is_list is_string J
 < apply append_list_string_is to _ _ J1.

Subgoal 2:

Variables: J Rest SRest S
IH : forall L J,
       is_list (is_list is_string) L -> join L J * -> is_list is_string J
J : join SRest Rest *
J1 : S ++ Rest = J
H1 : is_list is_string S
H2 : is_list (is_list is_string) SRest
H3 : is_list is_string Rest
H4 : is_list is_string J
============================
 is_list is_string J
 < search.

Proof completed.
 < Extensible_Theorem
      transE_is : forall Names E T,
         IsE : is_expr E ->
         IsNames : is_list (is_list is_string) Names ->
         Trans : transE Names E T ->
         is_expr T
      on Trans as IH_E,
      transS_is : forall Names S T Names',
         IsS : is_stmt S ->
         IsNames : is_list (is_list is_string) Names ->
         Trans : transS Names S T Names' ->
         is_stmt T
      on Trans as IH_S,
      transS_isNames : forall Names S T Names',
         IsS : is_stmt S ->
         IsNames : is_list (is_list is_string) Names ->
         Trans : transS Names S T Names' ->
         is_list (is_list is_string) Names'
      on Trans as IH_S_Calso
   
      transA_is : forall Names A T,
         IsA : is_args A ->
         IsNames : is_list (is_list is_string) Names ->
         Trans : transA Names A T ->
         is_args T
      on Trans as IH_A,
      transRF_is : forall Names RF T,
         IsRF : is_recFieldExprs RF ->
         IsNames : is_list (is_list is_string) Names ->
         Trans : transRF Names RF T ->
         is_recFieldExprs T
      on Trans as IH_RF.

Subgoal 1.1:

Variables: Names I
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (num I)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (num I) (num I) @
============================
 is_expr (num I)
 < search.

Subgoal 1.2:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (plus E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (plus E11 E21)
 < case IsE.

Subgoal 1.2:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (plus E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.2:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (plus E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.2:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (plus E11 E21)
 < search.

Subgoal 1.3:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (minus E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (minus E11 E21)
 < case IsE.

Subgoal 1.3:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (minus E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.3:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (minus E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.3:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (minus E11 E21)
 < search.

Subgoal 1.4:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (mult E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (mult E11 E21)
 < case IsE.

Subgoal 1.4:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (mult E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.4:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (mult E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.4:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (mult E11 E21)
 < search.

Subgoal 1.5:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (div E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (div E1 E2) (div E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (div E11 E21)
 < case IsE.

Subgoal 1.5:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (div E1 E2) (div E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (div E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.5:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (div E1 E2) (div E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (div E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.5:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (div E1 E2) (div E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (div E11 E21)
 < search.

Subgoal 1.6:

Variables: Names
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr true
IsNames : is_list (is_list is_string) Names
Trans : transE Names true true @
============================
 is_expr true
 < search.

Subgoal 1.7:

Variables: Names
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr false
IsNames : is_list (is_list is_string) Names
Trans : transE Names false false @
============================
 is_expr false
 < search.

Subgoal 1.8:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (and E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (and E1 E2) (and E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (and E11 E21)
 < case IsE.

Subgoal 1.8:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (and E1 E2) (and E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (and E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.8:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (and E1 E2) (and E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (and E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.8:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (and E1 E2) (and E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (and E11 E21)
 < search.

Subgoal 1.9:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (or E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (or E1 E2) (or E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (or E11 E21)
 < case IsE.

Subgoal 1.9:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (or E1 E2) (or E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (or E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.9:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (or E1 E2) (or E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (or E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.9:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (or E1 E2) (or E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (or E11 E21)
 < search.

Subgoal 1.10:

Variables: Names E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (not E1)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (not E1) (not E2) @
Trans1 : transE Names E1 E2 *
============================
 is_expr (not E2)
 < case IsE.

Subgoal 1.10:

Variables: Names E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (not E1) (not E2) @
Trans1 : transE Names E1 E2 *
H1 : is_expr E1
============================
 is_expr (not E2)
 < apply IH_E to _ _ Trans1.

Subgoal 1.10:

Variables: Names E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (not E1) (not E2) @
Trans1 : transE Names E1 E2 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (not E2)
 < search.

Subgoal 1.11:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (greater E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (greater E11 E21)
 < case IsE.

Subgoal 1.11:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (greater E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.11:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (greater E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.11:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (greater E11 E21)
 < search.

Subgoal 1.12:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (eq E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (eq E11 E21)
 < case IsE.

Subgoal 1.12:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (eq E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.12:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (eq E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.12:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (eq E11 E21)
 < search.

Subgoal 1.13:

Variables: Names S
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (stringLit S)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (stringLit S) (stringLit S) @
============================
 is_expr (stringLit S)
 < search.

Subgoal 1.14:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (appString E1 E2)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
============================
 is_expr (appString E11 E21)
 < case IsE.

Subgoal 1.14:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
============================
 is_expr (appString E11 E21)
 < apply IH_E to _ _ Trans1.

Subgoal 1.14:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
============================
 is_expr (appString E11 E21)
 < apply IH_E to _ _ Trans2.

Subgoal 1.14:

Variables: Names E21 E11 E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @
Trans1 : transE Names E1 E11 *
Trans2 : transE Names E2 E21 *
H1 : is_expr E1
H2 : is_expr E2
H3 : is_expr E11
H4 : is_expr E21
============================
 is_expr (appString E11 E21)
 < search.

Subgoal 1.15:

Variables: Names X
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (name X)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (name X) (name X) @
============================
 is_expr (name X)
 < search.

Subgoal 1.16:

Variables: Names A1 F A
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (call F A)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (call F A) (call F A1) @
Trans1 : transA Names A A1 *
============================
 is_expr (call F A1)
 < case IsE.

Subgoal 1.16:

Variables: Names A1 F A
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (call F A) (call F A1) @
Trans1 : transA Names A A1 *
H1 : is_string F
H2 : is_args A
============================
 is_expr (call F A1)
 < apply IH_A to _ _ Trans1.

Subgoal 1.16:

Variables: Names A1 F A
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (call F A) (call F A1) @
Trans1 : transA Names A A1 *
H1 : is_string F
H2 : is_args A
H3 : is_args A1
============================
 is_expr (call F A1)
 < search.

Subgoal 1.17:

Variables: Names Names2 E2 S1 E1 S
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (stmtExpr S E1)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @
Trans1 : transS ([]::Names) S S1 Names2 *
Trans2 : transE Names2 E1 E2 *
============================
 is_expr (stmtExpr S1 E2)
 < case IsE.

Subgoal 1.17:

Variables: Names Names2 E2 S1 E1 S
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @
Trans1 : transS ([]::Names) S S1 Names2 *
Trans2 : transE Names2 E1 E2 *
H1 : is_stmt S
H2 : is_expr E1
============================
 is_expr (stmtExpr S1 E2)
 < apply IH_S to _ _ Trans1.

Subgoal 1.17:

Variables: Names Names2 E2 S1 E1 S
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @
Trans1 : transS ([]::Names) S S1 Names2 *
Trans2 : transE Names2 E1 E2 *
H1 : is_stmt S
H2 : is_expr E1
H3 : is_stmt S1
============================
 is_expr (stmtExpr S1 E2)
 < apply IH_S_C to _ _ Trans1.

Subgoal 1.17:

Variables: Names Names2 E2 S1 E1 S
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @
Trans1 : transS ([]::Names) S S1 Names2 *
Trans2 : transE Names2 E1 E2 *
H1 : is_stmt S
H2 : is_expr E1
H3 : is_stmt S1
H4 : is_list (is_list is_string) Names2
============================
 is_expr (stmtExpr S1 E2)
 < apply IH_E to _ _ Trans2.

Subgoal 1.17:

Variables: Names Names2 E2 S1 E1 S
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @
Trans1 : transS ([]::Names) S S1 Names2 *
Trans2 : transE Names2 E1 E2 *
H1 : is_stmt S
H2 : is_expr E1
H3 : is_stmt S1
H4 : is_list (is_list is_string) Names2
H5 : is_expr E2
============================
 is_expr (stmtExpr S1 E2)
 < search.

Subgoal 1.18:

Variables: Names RF1 RF
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (recBuild RF)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (recBuild RF) (recBuild RF1) @
Trans1 : transRF Names RF RF1 *
============================
 is_expr (recBuild RF1)
 < case IsE.

Subgoal 1.18:

Variables: Names RF1 RF
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (recBuild RF) (recBuild RF1) @
Trans1 : transRF Names RF RF1 *
H1 : is_recFieldExprs RF
============================
 is_expr (recBuild RF1)
 < apply IH_RF to _ _ Trans1.

Subgoal 1.18:

Variables: Names RF1 RF
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (recBuild RF) (recBuild RF1) @
Trans1 : transRF Names RF RF1 *
H1 : is_recFieldExprs RF
H2 : is_recFieldExprs RF1
============================
 is_expr (recBuild RF1)
 < search.

Subgoal 1.19:

Variables: Names F E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (recFieldAccess E1 F)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @
Trans1 : transE Names E1 E2 *
============================
 is_expr (recFieldAccess E2 F)
 < case IsE.

Subgoal 1.19:

Variables: Names F E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @
Trans1 : transE Names E1 E2 *
H1 : is_expr E1
H2 : is_string F
============================
 is_expr (recFieldAccess E2 F)
 < apply IH_E to _ _ Trans1.

Subgoal 1.19:

Variables: Names F E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @
Trans1 : transE Names E1 E2 *
H1 : is_expr E1
H2 : is_string F
H3 : is_expr E2
============================
 is_expr (recFieldAccess E2 F)
 < search.

Subgoal 1.20:

Variables: Names Ty E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr (errorExpr E1 Ty)
IsNames : is_list (is_list is_string) Names
Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @
Trans1 : transE Names E1 E2 *
============================
 is_expr (errorExpr E2 Ty)
 < case IsE.

Subgoal 1.20:

Variables: Names Ty E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @
Trans1 : transE Names E1 E2 *
H1 : is_expr E1
H2 : is_typ Ty
============================
 is_expr (errorExpr E2 Ty)
 < apply IH_E to _ _ Trans1.

Subgoal 1.20:

Variables: Names Ty E2 E1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @
Trans1 : transE Names E1 E2 *
H1 : is_expr E1
H2 : is_typ Ty
H3 : is_expr E2
============================
 is_expr (errorExpr E2 Ty)
 < search.

Subgoal 1.21:

Variables: Names T N E_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr <unknown I expr>
IsNames : is_list (is_list is_string) Names
Trans : transE Names <unknown I expr> T @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T *
============================
 is_expr T
 < apply join_is to _ Trans1.

Subgoal 1.21:

Variables: Names T N E_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr <unknown I expr>
IsNames : is_list (is_list is_string) Names
Trans : transE Names <unknown I expr> T @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T *
H1 : is_list is_string N
============================
 is_expr T
 < apply proj_expr_is to Trans2 _ _.

Subgoal 1.21:

Variables: Names T N E_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr <unknown I expr>
IsNames : is_list (is_list is_string) Names
Trans : transE Names <unknown I expr> T @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T *
H1 : is_list is_string N
H2 : is_expr E_P
============================
 is_expr T
 < apply IH_E to _ _ Trans3.

Subgoal 1.21:

Variables: Names T N E_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsE : is_expr <unknown I expr>
IsNames : is_list (is_list is_string) Names
Trans : transE Names <unknown I expr> T @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T *
H1 : is_list is_string N
H2 : is_expr E_P
H3 : is_expr T
============================
 is_expr T
 < search.

Subgoal 2.1:

Variables: Names'
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt noop
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' noop noop Names' @
============================
 is_stmt noop
 < search.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (seq S1 S2)
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
============================
 is_stmt (seq S11 S21)
 < case IsS.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 is_stmt (seq S11 S21)
 < apply IH_S to _ _ Trans1.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_stmt S11
============================
 is_stmt (seq S11 S21)
 < apply IH_S_C to _ _ Trans1.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
============================
 is_stmt (seq S11 S21)
 < apply IH_S to _ _ Trans2.

Subgoal 2.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
H5 : is_stmt S21
============================
 is_stmt (seq S11 S21)
 < search.

Subgoal 2.3:

Variables: Names1 Scope X E1 Ty E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (declare Ty X E)
IsNames : is_list (is_list is_string) (Scope::Names1)
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE (Scope::Names1) E E1 *
============================
 is_stmt (declare Ty X E1)
 < case IsS.

Subgoal 2.3:

Variables: Names1 Scope X E1 Ty E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) (Scope::Names1)
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE (Scope::Names1) E E1 *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 is_stmt (declare Ty X E1)
 < apply IH_E to _ _ Trans1.

Subgoal 2.3:

Variables: Names1 Scope X E1 Ty E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) (Scope::Names1)
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE (Scope::Names1) E E1 *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
H4 : is_expr E1
============================
 is_stmt (declare Ty X E1)
 < search.

Subgoal 2.4:

Variables: Names' E1 X E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (assign X E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @
Trans1 : transE Names' E E1 *
============================
 is_stmt (assign X E1)
 < case IsS.

Subgoal 2.4:

Variables: Names' E1 X E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @
Trans1 : transE Names' E E1 *
H1 : is_string X
H2 : is_expr E
============================
 is_stmt (assign X E1)
 < apply IH_E to _ _ Trans1.

Subgoal 2.4:

Variables: Names' E1 X E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @
Trans1 : transE Names' E E1 *
H1 : is_string X
H2 : is_expr E
H3 : is_expr E1
============================
 is_stmt (assign X E1)
 < search.

Subgoal 2.5:

Variables: Names' E1 Fs Rec E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (recUpdate Rec Fs E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @
Trans1 : transE Names' E E1 *
============================
 is_stmt (recUpdate Rec Fs E1)
 < case IsS.

Subgoal 2.5:

Variables: Names' E1 Fs Rec E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @
Trans1 : transE Names' E E1 *
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
============================
 is_stmt (recUpdate Rec Fs E1)
 < apply IH_E to _ _ Trans1.

Subgoal 2.5:

Variables: Names' E1 Fs Rec E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @
Trans1 : transE Names' E E1 *
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
H4 : is_expr E1
============================
 is_stmt (recUpdate Rec Fs E1)
 < search.

Subgoal 2.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (ifThenElse Cond Th El)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
============================
 is_stmt (ifThenElse Cond1 Th1 El1)
 < case IsS.

Subgoal 2.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 is_stmt (ifThenElse Cond1 Th1 El1)
 < apply IH_E to _ _ Trans1.

Subgoal 2.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
H4 : is_expr Cond1
============================
 is_stmt (ifThenElse Cond1 Th1 El1)
 < apply IH_S to _ _ Trans2.

Subgoal 2.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
H4 : is_expr Cond1
H5 : is_stmt Th1
============================
 is_stmt (ifThenElse Cond1 Th1 El1)
 < apply IH_S to _ _ Trans3.

Subgoal 2.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
H4 : is_expr Cond1
H5 : is_stmt Th1
H6 : is_stmt El1
============================
 is_stmt (ifThenElse Cond1 Th1 El1)
 < search.

Subgoal 2.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (while Cond Body)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Body Body1 Names2 *
============================
 is_stmt (while Cond1 Body1)
 < case IsS.

Subgoal 2.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Body Body1 Names2 *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 is_stmt (while Cond1 Body1)
 < apply IH_E to _ _ Trans1.

Subgoal 2.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Body Body1 Names2 *
H1 : is_expr Cond
H2 : is_stmt Body
H3 : is_expr Cond1
============================
 is_stmt (while Cond1 Body1)
 < apply IH_S to _ _ Trans2.

Subgoal 2.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Body Body1 Names2 *
H1 : is_expr Cond
H2 : is_stmt Body
H3 : is_expr Cond1
H4 : is_stmt Body1
============================
 is_stmt (while Cond1 Body1)
 < search.

Subgoal 2.8:

Variables: Names' Names2 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (scopeStmt S1)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @
Trans1 : transS ([]::Names') S1 S2 Names2 *
============================
 is_stmt (scopeStmt S2)
 < case IsS.

Subgoal 2.8:

Variables: Names' Names2 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @
Trans1 : transS ([]::Names') S1 S2 Names2 *
H1 : is_stmt S1
============================
 is_stmt (scopeStmt S2)
 < apply IH_S to _ _ Trans1.

Subgoal 2.8:

Variables: Names' Names2 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @
Trans1 : transS ([]::Names') S1 S2 Names2 *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 is_stmt (scopeStmt S2)
 < search.

Subgoal 2.9:

Variables: Names' E1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (printVal E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE Names' E E1 *
============================
 is_stmt (printVal E1)
 < case IsS.

Subgoal 2.9:

Variables: Names' E1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE Names' E E1 *
H1 : is_expr E
============================
 is_stmt (printVal E1)
 < apply IH_E to _ _ Trans1.

Subgoal 2.9:

Variables: Names' E1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE Names' E E1 *
H1 : is_expr E
H2 : is_expr E1
============================
 is_stmt (printVal E1)
 < search.

Subgoal 2.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
============================
 is_stmt T
 < apply join_is to _ Trans1.

Subgoal 2.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
H1 : is_list is_string N
============================
 is_stmt T
 < apply proj_stmt_is to Trans2 _ _.

Subgoal 2.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
H1 : is_list is_string N
H2 : is_stmt S_P
============================
 is_stmt T
 < apply IH_S to _ _ Trans3.

Subgoal 2.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
H1 : is_list is_string N
H2 : is_stmt S_P
H3 : is_stmt T
============================
 is_stmt T
 < search.

Subgoal 3.1:

Variables: Names'
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt noop
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' noop noop Names' @
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (seq S1 S2)
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
============================
 is_list (is_list is_string) Names'
 < case IsS.

Subgoal 3.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 is_list (is_list is_string) Names'
 < apply IH_S_C to _ _ Trans1.

Subgoal 3.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_list (is_list is_string) Names3
============================
 is_list (is_list is_string) Names'
 < apply IH_S_C to _ _ Trans2.

Subgoal 3.2:

Variables: Names Names' Names3 S21 S11 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS Names S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_list (is_list is_string) Names3
H4 : is_list (is_list is_string) Names'
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.3:

Variables: Names1 Scope X E1 Ty E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (declare Ty X E)
IsNames : is_list (is_list is_string) (Scope::Names1)
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE (Scope::Names1) E E1 *
============================
 is_list (is_list is_string) ((X::Scope)::Names1)
 < case IsS.

Subgoal 3.3:

Variables: Names1 Scope X E1 Ty E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) (Scope::Names1)
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE (Scope::Names1) E E1 *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 is_list (is_list is_string) ((X::Scope)::Names1)
 < case IsNames.

Subgoal 3.3:

Variables: Names1 Scope X E1 Ty E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @
Trans1 : transE (Scope::Names1) E E1 *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
H4 : is_list is_string Scope
H5 : is_list (is_list is_string) Names1
============================
 is_list (is_list is_string) ((X::Scope)::Names1)
 < search.

Subgoal 3.4:

Variables: Names' E1 X E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (assign X E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @
Trans1 : transE Names' E E1 *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.5:

Variables: Names' E1 Fs Rec E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (recUpdate Rec Fs E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @
Trans1 : transE Names' E E1 *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.6:

Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (ifThenElse Cond Th El)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Th Th1 NamesTh *
Trans3 : transS ([]::Names') El El1 NamesEl *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.7:

Variables: Names' Names2 Body1 Cond1 Body Cond
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (while Cond Body)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @
Trans1 : transE Names' Cond Cond1 *
Trans2 : transS ([]::Names') Body Body1 Names2 *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.8:

Variables: Names' Names2 S2 S1
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (scopeStmt S1)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @
Trans1 : transS ([]::Names') S1 S2 Names2 *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.9:

Variables: Names' E1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt (printVal E)
IsNames : is_list (is_list is_string) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @
Trans1 : transE Names' E E1 *
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 3.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
============================
 is_list (is_list is_string) Names'
 < apply join_is to _ Trans1.

Subgoal 3.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
H1 : is_list is_string N
============================
 is_list (is_list is_string) Names'
 < apply proj_stmt_is to Trans2 _ _.

Subgoal 3.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
H1 : is_list is_string N
H2 : is_stmt S_P
============================
 is_list (is_list is_string) Names'
 < apply IH_S_C to _ _ Trans3.

Subgoal 3.10:

Variables: Names T Names' N S_P
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) Names
Trans : transS Names <unknown I stmt> T Names' @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' *
H1 : is_list is_string N
H2 : is_stmt S_P
H3 : is_list (is_list is_string) Names'
============================
 is_list (is_list is_string) Names'
 < search.

Subgoal 4:

Variables: Names A T
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsA : is_args A
IsNames : is_list (is_list is_string) Names
Trans : transA Names A T @
============================
 is_args T
 < Trans: case Trans (keep).

Subgoal 4.1:

Variables: Names
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsA : is_args nilArgs
IsNames : is_list (is_list is_string) Names
Trans : transA Names nilArgs nilArgs @
============================
 is_args nilArgs
 < search.

Subgoal 4.2:

Variables: Names A2 E1 A1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsA : is_args (consArgs E A1)
IsNames : is_list (is_list is_string) Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE Names E E1 *
Trans2 : transA Names A1 A2 *
============================
 is_args (consArgs E1 A2)
 < case IsA.

Subgoal 4.2:

Variables: Names A2 E1 A1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE Names E E1 *
Trans2 : transA Names A1 A2 *
H1 : is_expr E
H2 : is_args A1
============================
 is_args (consArgs E1 A2)
 < apply IH_E to _ _ Trans1.

Subgoal 4.2:

Variables: Names A2 E1 A1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE Names E E1 *
Trans2 : transA Names A1 A2 *
H1 : is_expr E
H2 : is_args A1
H3 : is_expr E1
============================
 is_args (consArgs E1 A2)
 < apply IH_A to _ _ Trans2.

Subgoal 4.2:

Variables: Names A2 E1 A1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @
Trans1 : transE Names E E1 *
Trans2 : transA Names A1 A2 *
H1 : is_expr E
H2 : is_args A1
H3 : is_expr E1
H4 : is_args A2
============================
 is_args (consArgs E1 A2)
 < search.

Subgoal 5:

Variables: Names RF T
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsRF : is_recFieldExprs RF
IsNames : is_list (is_list is_string) Names
Trans : transRF Names RF T @
============================
 is_recFieldExprs T
 < Trans: case Trans (keep).

Subgoal 5.1:

Variables: Names
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsRF : is_recFieldExprs nilRecFieldExprs
IsNames : is_list (is_list is_string) Names
Trans : transRF Names nilRecFieldExprs nilRecFieldExprs @
============================
 is_recFieldExprs nilRecFieldExprs
 < search.

Subgoal 5.2:

Variables: Names RF2 E1 F RF1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsRF : is_recFieldExprs (consRecFieldExprs F E RF1)
IsNames : is_list (is_list is_string) Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE Names E E1 *
Trans2 : transRF Names RF1 RF2 *
============================
 is_recFieldExprs (consRecFieldExprs F E1 RF2)
 < case IsRF.

Subgoal 5.2:

Variables: Names RF2 E1 F RF1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE Names E E1 *
Trans2 : transRF Names RF1 RF2 *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
============================
 is_recFieldExprs (consRecFieldExprs F E1 RF2)
 < apply IH_E to _ _ Trans1.

Subgoal 5.2:

Variables: Names RF2 E1 F RF1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE Names E E1 *
Trans2 : transRF Names RF1 RF2 *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
H4 : is_expr E1
============================
 is_recFieldExprs (consRecFieldExprs F E1 RF2)
 < apply IH_RF to _ _ Trans2.

Subgoal 5.2:

Variables: Names RF2 E1 F RF1 E
IH_E : forall Names E T,
         is_expr E -> is_list (is_list is_string) Names -> transE Names E T * ->
         is_expr T
IH_S : forall Names S T Names',
         is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
         is_stmt T
IH_S_C : forall Names S T Names',
           is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * ->
           is_list (is_list is_string) Names'
IH_A : forall Names A T,
         is_args A -> is_list (is_list is_string) Names -> transA Names A T * ->
         is_args T
IH_RF : forall Names RF T,
          is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * ->
          is_recFieldExprs T
IsNames : is_list (is_list is_string) Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @
Trans1 : transE Names E E1 *
Trans2 : transRF Names RF1 RF2 *
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
H4 : is_expr E1
H5 : is_recFieldExprs RF2
============================
 is_recFieldExprs (consRecFieldExprs F E1 RF2)
 < search.

Proof completed.
 < Theorem domain_is_tys :
     forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D -> is_list is_string D.

============================
 forall L D,
   is_list (is_pair is_string is_typ) L -> domain L D -> is_list is_string D
 < induction on 2.

IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
============================
 forall L D,
   is_list (is_pair is_string is_typ) L -> domain L D @ -> is_list is_string D
 < intros Is D.

Variables: L D
IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
Is : is_list (is_pair is_string is_typ) L
D : domain L D @
============================
 is_list is_string D
 < D: case D.

Subgoal 1:

IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
Is : is_list (is_pair is_string is_typ) []
============================
 is_list is_string []
 < search.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
Is : is_list (is_pair is_string is_typ) ((A, B)::Rest)
D : domain Rest DRest *
============================
 is_list is_string (A::DRest)
 < Is: case Is.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
D : domain Rest DRest *
Is : is_pair is_string is_typ (A, B)
Is1 : is_list (is_pair is_string is_typ) Rest
============================
 is_list is_string (A::DRest)
 < case Is.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
D : domain Rest DRest *
Is1 : is_list (is_pair is_string is_typ) Rest
H1 : is_string A
H2 : is_typ B
============================
 is_list is_string (A::DRest)
 < apply IH to _ D.

Subgoal 2:

Variables: DRest A Rest B
IH : forall L D,
       is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D
D : domain Rest DRest *
Is1 : is_list (is_pair is_string is_typ) Rest
H1 : is_string A
H2 : is_typ B
H3 : is_list is_string DRest
============================
 is_list is_string (A::DRest)
 < search.

Proof completed.
 < Extensible_Theorem
      transF_is : forall F T,
         IsF : is_fun F ->
         Trans : transF F T ->
         is_fun T
      on Trans.

Subgoal 1:

Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body
IH : forall F T, is_fun F -> transF F T * -> is_fun T
IsF : is_fun (fun F1 RetTy RetVar InitVal Params Body)
Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body1 Names1
============================
 is_fun (fun F1 RetTy RetVar InitVal Params Body1)
 < case IsF.

Subgoal 1:

Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body
IH : forall F T, is_fun F -> transF F T * -> is_fun T
Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body1 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body
============================
 is_fun (fun F1 RetTy RetVar InitVal Params Body1)
 < apply paramTys_is to _ Trans1.

Subgoal 1:

Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body
IH : forall F T, is_fun F -> transF F T * -> is_fun T
Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body1 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body
H7 : is_list (is_pair is_string is_typ) PTys
============================
 is_fun (fun F1 RetTy RetVar InitVal Params Body1)
 < apply domain_is_tys to _ Trans2.

Subgoal 1:

Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body
IH : forall F T, is_fun F -> transF F T * -> is_fun T
Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body1 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body
H7 : is_list (is_pair is_string is_typ) PTys
H8 : is_list is_string Names
============================
 is_fun (fun F1 RetTy RetVar InitVal Params Body1)
 < apply transS_is to _ _ Trans3.

Subgoal 1:

Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body
IH : forall F T, is_fun F -> transF F T * -> is_fun T
Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body1 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body
H7 : is_list (is_pair is_string is_typ) PTys
H8 : is_list is_string Names
H9 : is_stmt Body1
============================
 is_fun (fun F1 RetTy RetVar InitVal Params Body1)
 < search.

Subgoal 2:

Variables: T F_P
IH : forall F T, is_fun F -> transF F T * -> is_fun T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> T @
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P T *
============================
 is_fun T
 < apply proj_fun_is to Trans1 _.

Subgoal 2:

Variables: T F_P
IH : forall F T, is_fun F -> transF F T * -> is_fun T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> T @
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P T *
H1 : is_fun F_P
============================
 is_fun T
 < apply IH to _ Trans2.

Subgoal 2:

Variables: T F_P
IH : forall F T, is_fun F -> transF F T * -> is_fun T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> T @
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P T *
H1 : is_fun F_P
H2 : is_fun T
============================
 is_fun T
 < search.

Proof completed.
 < Theorem transFuns_is :
     forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts -> is_list is_fun Ts.

============================
 forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts -> is_list is_fun Ts
 < induction on 2.

IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
============================
 forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts @ -> is_list is_fun Ts
 < intros IsFs TF.

Variables: Fs Ts
IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
IsFs : is_list is_fun Fs
TF : transFuns Fs Ts @
============================
 is_list is_fun Ts
 < TF: case TF.

Subgoal 1:

IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
IsFs : is_list is_fun []
============================
 is_list is_fun []
 < search.

Subgoal 2:

Variables: Rest1 F1 Rest F
IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
IsFs : is_list is_fun (F::Rest)
TF : transF F F1
TF1 : transFuns Rest Rest1 *
============================
 is_list is_fun (F1::Rest1)
 < case IsFs.

Subgoal 2:

Variables: Rest1 F1 Rest F
IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
TF : transF F F1
TF1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
============================
 is_list is_fun (F1::Rest1)
 < apply IH to _ TF1.

Subgoal 2:

Variables: Rest1 F1 Rest F
IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
TF : transF F F1
TF1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : is_list is_fun Rest1
============================
 is_list is_fun (F1::Rest1)
 < apply transF_is to _ TF.

Subgoal 2:

Variables: Rest1 F1 Rest F
IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts
TF : transF F F1
TF1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : is_list is_fun Rest1
H4 : is_fun F1
============================
 is_list is_fun (F1::Rest1)
 < search.

Proof completed.
 < Extensible_Theorem
      transP_is : forall P T,
         IsP : is_program P ->
         Trans : transP P T ->
         is_program T
      on Trans.

Subgoal 1:

Variables: Main1 Funs1 Main Funs
IH : forall P T, is_program P -> transP P T * -> is_program T
IsP : is_program (program Funs Main)
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
============================
 is_program (program Funs1 Main1)
 < case IsP.

Subgoal 1:

Variables: Main1 Funs1 Main Funs
IH : forall P T, is_program P -> transP P T * -> is_program T
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 is_program (program Funs1 Main1)
 < apply transFuns_is to _ Trans1.

Subgoal 1:

Variables: Main1 Funs1 Main Funs
IH : forall P T, is_program P -> transP P T * -> is_program T
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
H3 : is_list is_fun Funs1
============================
 is_program (program Funs1 Main1)
 < apply transF_is to _ Trans2.

Subgoal 1:

Variables: Main1 Funs1 Main Funs
IH : forall P T, is_program P -> transP P T * -> is_program T
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
============================
 is_program (program Funs1 Main1)
 < search.

Subgoal 2:

Variables: T P_P
IH : forall P T, is_program P -> transP P T * -> is_program T
IsP : is_program <unknown I program>
Trans : transP <unknown I program> T @
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P T *
============================
 is_program T
 < apply proj_program_is to Trans1 _.

Subgoal 2:

Variables: T P_P
IH : forall P T, is_program P -> transP P T * -> is_program T
IsP : is_program <unknown I program>
Trans : transP <unknown I program> T @
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P T *
H1 : is_program P_P
============================
 is_program T
 < apply IH to _ Trans2.

Subgoal 2:

Variables: T P_P
IH : forall P T, is_program P -> transP P T * -> is_program T
IsP : is_program <unknown I program>
Trans : transP <unknown I program> T @
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P T *
H1 : is_program P_P
H2 : is_program T
============================
 is_program T
 < search.

Proof completed.
 < Extensible_Theorem
      transS_old_scopes : forall Names Scope S S' Names',
         IsS : is_stmt S ->
         IsNames : is_list (is_list is_string) (Scope::Names) ->
         Trans : transS (Scope::Names) S S' Names' ->
         exists Scope',
           Names' = Scope'::Names
      on Trans.

Subgoal 1:

Variables: Names Scope
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt noop
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) noop noop (Scope::Names) @
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 2:

Variables: Names Scope Names' Names3 S21 S11 S2 S1
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (seq S1 S2)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS (Scope::Names) S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
============================
 exists Scope', Names' = Scope'::Names
 < case IsS.

Subgoal 2:

Variables: Names Scope Names' Names3 S21 S11 S2 S1
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS (Scope::Names) S1 S11 Names3 *
Trans2 : transS Names3 S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 exists Scope', Names' = Scope'::Names
 < apply IH to _ _ Trans1.

Subgoal 2:

Variables: Names Scope Names' S21 S11 S2 S1 Scope'
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) *
Trans2 : transS (Scope'::Names) S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
============================
 exists Scope', Names' = Scope'::Names
 < apply transS_isNames to _ _ Trans1.

Subgoal 2:

Variables: Names Scope Names' S21 S11 S2 S1 Scope'
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @
Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) *
Trans2 : transS (Scope'::Names) S2 S21 Names' *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_list (is_list is_string) (Scope'::Names)
============================
 exists Scope', Names' = Scope'::Names
 < apply IH to _ _ Trans2.

Subgoal 2:

Variables: Names Scope S21 S11 S2 S1 Scope' Scope'1
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) (Scope'1::Names) @
Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) *
Trans2 : transS (Scope'::Names) S2 S21 (Scope'1::Names) *
H1 : is_stmt S1
H2 : is_stmt S2
H3 : is_list (is_list is_string) (Scope'::Names)
============================
 exists Scope', Scope'1::Names = Scope'::Names
 < search.

Subgoal 3:

Variables: Names Scope X E1 Ty E
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (declare Ty X E)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names) @
Trans1 : transE (Scope::Names) E E1 *
============================
 exists Scope', (X::Scope)::Names = Scope'::Names
 < search.

Subgoal 4:

Variables: Names Scope E1 X E
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (assign X E)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (assign X E) (assign X E1) (Scope::Names) @
Trans1 : transE (Scope::Names) E E1 *
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 5:

Variables: Names Scope E1 Fs Rec E
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (recUpdate Rec Fs E)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (recUpdate Rec Fs E) (recUpdate Rec Fs E1) (Scope::Names) @
Trans1 : transE (Scope::Names) E E1 *
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 6:

Variables: Names Scope NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (ifThenElse Cond Th El)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) (Scope::Names) @
Trans1 : transE (Scope::Names) Cond Cond1 *
Trans2 : transS ([]::(Scope::Names)) Th Th1 NamesTh *
Trans3 : transS ([]::(Scope::Names)) El El1 NamesEl *
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 7:

Variables: Names Scope Names2 Body1 Cond1 Body Cond
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (while Cond Body)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (while Cond Body) (while Cond1 Body1) (Scope::Names) @
Trans1 : transE (Scope::Names) Cond Cond1 *
Trans2 : transS ([]::(Scope::Names)) Body Body1 Names2 *
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 8:

Variables: Names Scope Names2 S2 S1
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (scopeStmt S1)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (scopeStmt S1) (scopeStmt S2) (Scope::Names) @
Trans1 : transS ([]::(Scope::Names)) S1 S2 Names2 *
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 9:

Variables: Names Scope E1 E
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt (printVal E)
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) (printVal E) (printVal E1) (Scope::Names) @
Trans1 : transE (Scope::Names) E E1 *
============================
 exists Scope', Scope::Names = Scope'::Names
 < search.

Subgoal 10:

Variables: Names Scope S' Names' N S_P
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) <unknown I stmt> S' Names' @
Trans1 : join (Scope::Names) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (Scope::Names) S_P S' Names' *
============================
 exists Scope', Names' = Scope'::Names
 < apply join_is to _ Trans1.

Subgoal 10:

Variables: Names Scope S' Names' N S_P
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) <unknown I stmt> S' Names' @
Trans1 : join (Scope::Names) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (Scope::Names) S_P S' Names' *
H1 : is_list is_string N
============================
 exists Scope', Names' = Scope'::Names
 < apply proj_stmt_is to Trans2 _ _.

Subgoal 10:

Variables: Names Scope S' Names' N S_P
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) <unknown I stmt> S' Names' @
Trans1 : join (Scope::Names) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (Scope::Names) S_P S' Names' *
H1 : is_list is_string N
H2 : is_stmt S_P
============================
 exists Scope', Names' = Scope'::Names
 < apply IH to _ _ Trans3.

Subgoal 10:

Variables: Names Scope S' N S_P Scope'
IH : forall Names Scope S S' Names',
       is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * ->
       exists Scope', Names' = Scope'::Names
IsS : is_stmt <unknown I stmt>
IsNames : is_list (is_list is_string) (Scope::Names)
Trans : transS (Scope::Names) <unknown I stmt> S' (Scope'::Names) @
Trans1 : join (Scope::Names) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (Scope::Names) S_P S' (Scope'::Names) *
H1 : is_list is_string N
H2 : is_stmt S_P
============================
 exists Scope'1, Scope'::Names = Scope'1::Names
 < search.

Proof completed.
 < Theorem mem_names  [K, V] :
     forall (EE : list (list (pair K V))) N X,
       names EE N -> mem X N -> exists V, mems (X, V) EE.

============================
 forall EE N X, names EE N -> mem X N -> exists V, mems (X, V) EE
 < induction on 1.

IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
============================
 forall EE N X, names EE N @ -> mem X N -> exists V, mems (X, V) EE
 < intros Names M.

Variables: EE N X
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
Names : names EE N @
M : mem X N
============================
 exists V, mems (X, V) EE
 < Names: case Names.

Subgoal 1:

Variables: X
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X []
============================
 exists V, mems (X, V) []
 < case M.

Subgoal 2:

Variables: N X NScope NRest Rest Scope
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X N
Names : domain Scope NScope
Names1 : names Rest NRest *
Names2 : NScope ++ NRest = N
============================
 exists V, mems (X, V) (Scope::Rest)
 < Or: apply mem_append to M Names2.

Subgoal 2:

Variables: N X NScope NRest Rest Scope
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X N
Names : domain Scope NScope
Names1 : names Rest NRest *
Names2 : NScope ++ NRest = N
Or : mem X NScope \/ mem X NRest
============================
 exists V, mems (X, V) (Scope::Rest)
 < M': case Or.

Subgoal 2.1:

Variables: N X NScope NRest Rest Scope
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X N
Names : domain Scope NScope
Names1 : names Rest NRest *
Names2 : NScope ++ NRest = N
M' : mem X NScope
============================
 exists V, mems (X, V) (Scope::Rest)
 < apply mem_domain to Names M'.

Subgoal 2.1:

Variables: N X NScope NRest Rest Scope B
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X N
Names : domain Scope NScope
Names1 : names Rest NRest *
Names2 : NScope ++ NRest = N
M' : mem X NScope
H1 : mem (X, B) Scope
============================
 exists V, mems (X, V) (Scope::Rest)
 < search.

Subgoal 2.2:

Variables: N X NScope NRest Rest Scope
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X N
Names : domain Scope NScope
Names1 : names Rest NRest *
Names2 : NScope ++ NRest = N
M' : mem X NRest
============================
 exists V, mems (X, V) (Scope::Rest)
 < apply IH to Names1 M'.

Subgoal 2.2:

Variables: N X NScope NRest Rest Scope V
IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE
M : mem X N
Names : domain Scope NScope
Names1 : names Rest NRest *
Names2 : NScope ++ NRest = N
M' : mem X NRest
H1 : mems (X, V) Rest
============================
 exists V, mems (X, V) (Scope::Rest)
 < search.

Proof completed.
 < Theorem mems_names  [K, V] :
     forall EE N (X : K) (V : V), names EE N -> mems (X, V) EE -> mem X N.

============================
 forall EE N X V, names EE N -> mems (X, V) EE -> mem X N
 < induction on 2.

IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
============================
 forall EE N X V, names EE N -> mems (X, V) EE @ -> mem X N
 < intros N M.

Variables: EE N X V
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
N : names EE N
M : mems (X, V) EE @
============================
 mem X N
 < M: case M.

Subgoal 1:

Variables: N X V Rest S
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
N : names (S::Rest) N
M : mem (X, V) S
============================
 mem X N
 < N: case N.

Subgoal 1:

Variables: N X V Rest S NScope NRest
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
M : mem (X, V) S
N : domain S NScope
N1 : names Rest NRest
N2 : NScope ++ NRest = N
============================
 mem X N
 < MNS: apply domain_mem to M N.

Subgoal 1:

Variables: N X V Rest S NScope NRest
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
M : mem (X, V) S
N : domain S NScope
N1 : names Rest NRest
N2 : NScope ++ NRest = N
MNS : mem X NScope
============================
 mem X N
 < apply mem_append_left to MNS N2.

Subgoal 1:

Variables: N X V Rest S NScope NRest
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
M : mem (X, V) S
N : domain S NScope
N1 : names Rest NRest
N2 : NScope ++ NRest = N
MNS : mem X NScope
H1 : mem X N
============================
 mem X N
 < search.

Subgoal 2:

Variables: N X V Rest S
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
N : names (S::Rest) N
M : mems (X, V) Rest *
============================
 mem X N
 < N: case N.

Subgoal 2:

Variables: N X V Rest S NScope NRest
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
M : mems (X, V) Rest *
N : domain S NScope
N1 : names Rest NRest
N2 : NScope ++ NRest = N
============================
 mem X N
 < MNR: apply IH to N1 M.

Subgoal 2:

Variables: N X V Rest S NScope NRest
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
M : mems (X, V) Rest *
N : domain S NScope
N1 : names Rest NRest
N2 : NScope ++ NRest = N
MNR : mem X NRest
============================
 mem X N
 < apply mem_append_right to MNR N2.

Subgoal 2:

Variables: N X V Rest S NScope NRest
IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N
M : mems (X, V) Rest *
N : domain S NScope
N1 : names Rest NRest
N2 : NScope ++ NRest = N
MNR : mem X NRest
H1 : mem X N
============================
 mem X N
 < search.

Proof completed.
 < Theorem mem_join  [A] :
     forall (L : list (list A)) J X, join L J -> mem X J -> mems X L.

============================
 forall L J X, join L J -> mem X J -> mems X L
 < induction on 1.

IH : forall L J X, join L J * -> mem X J -> mems X L
============================
 forall L J X, join L J @ -> mem X J -> mems X L
 < intros J M.

Variables: L J X
IH : forall L J X, join L J * -> mem X J -> mems X L
J : join L J @
M : mem X J
============================
 mems X L
 < J: case J.

Subgoal 1:

Variables: X
IH : forall L J X, join L J * -> mem X J -> mems X L
M : mem X []
============================
 mems X []
 < case M.

Subgoal 2:

Variables: J X Rest SRest S
IH : forall L J X, join L J * -> mem X J -> mems X L
M : mem X J
J : join SRest Rest *
J1 : S ++ Rest = J
============================
 mems X (S::SRest)
 < Or: apply mem_append to M J1.

Subgoal 2:

Variables: J X Rest SRest S
IH : forall L J X, join L J * -> mem X J -> mems X L
M : mem X J
J : join SRest Rest *
J1 : S ++ Rest = J
Or : mem X S \/ mem X Rest
============================
 mems X (S::SRest)
 < M': case Or.

Subgoal 2.1:

Variables: J X Rest SRest S
IH : forall L J X, join L J * -> mem X J -> mems X L
M : mem X J
J : join SRest Rest *
J1 : S ++ Rest = J
M' : mem X S
============================
 mems X (S::SRest)
 < search.

Subgoal 2.2:

Variables: J X Rest SRest S
IH : forall L J X, join L J * -> mem X J -> mems X L
M : mem X J
J : join SRest Rest *
J1 : S ++ Rest = J
M' : mem X Rest
============================
 mems X (S::SRest)
 < apply IH to J M'.

Subgoal 2.2:

Variables: J X Rest SRest S
IH : forall L J X, join L J * -> mem X J -> mems X L
M : mem X J
J : join SRest Rest *
J1 : S ++ Rest = J
M' : mem X Rest
H1 : mems X SRest
============================
 mems X (S::SRest)
 < search.

Proof completed.
 < Theorem mems_join  [A] :
     forall L J (X : A), join L J -> mems X L -> mem X J.

============================
 forall L J X, join L J -> mems X L -> mem X J
 < induction on 2.

IH : forall L J X, join L J -> mems X L * -> mem X J
============================
 forall L J X, join L J -> mems X L @ -> mem X J
 < intros J M.

Variables: L J X
IH : forall L J X, join L J -> mems X L * -> mem X J
J : join L J
M : mems X L @
============================
 mem X J
 < M: case M.

Subgoal 1:

Variables: J X Rest S
IH : forall L J X, join L J -> mems X L * -> mem X J
J : join (S::Rest) J
M : mem X S
============================
 mem X J
 < J: case J.

Subgoal 1:

Variables: J X Rest S Rest1
IH : forall L J X, join L J -> mems X L * -> mem X J
M : mem X S
J : join Rest Rest1
J1 : S ++ Rest1 = J
============================
 mem X J
 < apply mem_append_left to M J1.

Subgoal 1:

Variables: J X Rest S Rest1
IH : forall L J X, join L J -> mems X L * -> mem X J
M : mem X S
J : join Rest Rest1
J1 : S ++ Rest1 = J
H1 : mem X J
============================
 mem X J
 < search.

Subgoal 2:

Variables: J X Rest S
IH : forall L J X, join L J -> mems X L * -> mem X J
J : join (S::Rest) J
M : mems X Rest *
============================
 mem X J
 < J: case J.

Subgoal 2:

Variables: J X Rest S Rest1
IH : forall L J X, join L J -> mems X L * -> mem X J
M : mems X Rest *
J : join Rest Rest1
J1 : S ++ Rest1 = J
============================
 mem X J
 < MR: apply IH to J M.

Subgoal 2:

Variables: J X Rest S Rest1
IH : forall L J X, join L J -> mems X L * -> mem X J
M : mems X Rest *
J : join Rest Rest1
J1 : S ++ Rest1 = J
MR : mem X Rest1
============================
 mem X J
 < apply mem_append_right to MR J1.

Subgoal 2:

Variables: J X Rest S Rest1
IH : forall L J X, join L J -> mems X L * -> mem X J
M : mems X Rest *
J : join Rest Rest1
J1 : S ++ Rest1 = J
MR : mem X Rest1
H1 : mem X J
============================
 mem X J
 < search.

Proof completed.
 < Theorem ctx_names_mems_fwd  [K, V] :
     forall EE N (X : K) (V : V), ctx_names EE N -> mems (X, V) EE -> mems X N.

============================
 forall EE N X V, ctx_names EE N -> mems (X, V) EE -> mems X N
 < induction on 2.

IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
============================
 forall EE N X V, ctx_names EE N -> mems (X, V) EE @ -> mems X N
 < intros Ctxs M.

Variables: EE N X V
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
Ctxs : ctx_names EE N
M : mems (X, V) EE @
============================
 mems X N
 < M: case M.

Subgoal 1:

Variables: N X V Rest S
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
Ctxs : ctx_names (S::Rest) N
M : mem (X, V) S
============================
 mems X N
 < C: case Ctxs.

Subgoal 1:

Variables: X V Rest S BRest B
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
M : mem (X, V) S
C : forall K I, mem (K, I) S -> mem K B
C1 : forall K, mem K B -> exists I, mem (K, I) S
C2 : ctx_names Rest BRest
============================
 mems X (B::BRest)
 < apply C to M.

Subgoal 1:

Variables: X V Rest S BRest B
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
M : mem (X, V) S
C : forall K I, mem (K, I) S -> mem K B
C1 : forall K, mem K B -> exists I, mem (K, I) S
C2 : ctx_names Rest BRest
H1 : mem X B
============================
 mems X (B::BRest)
 < search.

Subgoal 2:

Variables: N X V Rest S
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
Ctxs : ctx_names (S::Rest) N
M : mems (X, V) Rest *
============================
 mems X N
 < C: case Ctxs.

Subgoal 2:

Variables: X V Rest S BRest B
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
M : mems (X, V) Rest *
C : forall K I, mem (K, I) S -> mem K B
C1 : forall K, mem K B -> exists I, mem (K, I) S
C2 : ctx_names Rest BRest
============================
 mems X (B::BRest)
 < apply IH to C2 M.

Subgoal 2:

Variables: X V Rest S BRest B
IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N
M : mems (X, V) Rest *
C : forall K I, mem (K, I) S -> mem K B
C1 : forall K, mem K B -> exists I, mem (K, I) S
C2 : ctx_names Rest BRest
H1 : mems X BRest
============================
 mems X (B::BRest)
 < search.

Proof completed.
 < Theorem ctx_names_mem_back  [K, V] :
     forall EE N (X : K),
       ctx_names EE N -> mems X N -> exists (V : V), mems (X, V) EE.

============================
 forall EE N X, ctx_names EE N -> mems X N -> exists V, mems (X, V) EE
 < induction on 2.

IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
============================
 forall EE N X, ctx_names EE N -> mems X N @ -> exists V, mems (X, V) EE
 < intros Ctxs M.

Variables: EE N X
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
Ctxs : ctx_names EE N
M : mems X N @
============================
 exists V, mems (X, V) EE
 < M: case M.

Subgoal 1:

Variables: EE X Rest S
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
Ctxs : ctx_names EE (S::Rest)
M : mem X S
============================
 exists V, mems (X, V) EE
 < C: case Ctxs.

Subgoal 1:

Variables: X Rest S ARest A
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
M : mem X S
C : forall K I, mem (K, I) A -> mem K S
C1 : forall K, mem K S -> exists I, mem (K, I) A
C2 : ctx_names ARest Rest
============================
 exists V, mems (X, V) (A::ARest)
 < apply C1 to M.

Subgoal 1:

Variables: X Rest S ARest A I
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
M : mem X S
C : forall K I, mem (K, I) A -> mem K S
C1 : forall K, mem K S -> exists I, mem (K, I) A
C2 : ctx_names ARest Rest
H1 : mem (X, I) A
============================
 exists V, mems (X, V) (A::ARest)
 < search.

Subgoal 2:

Variables: EE X Rest S
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
Ctxs : ctx_names EE (S::Rest)
M : mems X Rest *
============================
 exists V, mems (X, V) EE
 < C: case Ctxs.

Subgoal 2:

Variables: X Rest S ARest A
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
M : mems X Rest *
C : forall K I, mem (K, I) A -> mem K S
C1 : forall K, mem K S -> exists I, mem (K, I) A
C2 : ctx_names ARest Rest
============================
 exists V, mems (X, V) (A::ARest)
 < apply IH to C2 M.

Subgoal 2:

Variables: X Rest S ARest A V
IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE
M : mems X Rest *
C : forall K I, mem (K, I) A -> mem K S
C1 : forall K, mem K S -> exists I, mem (K, I) A
C2 : ctx_names ARest Rest
H1 : mems (X, V) ARest
============================
 exists V, mems (X, V) (A::ARest)
 < search.

Proof completed.
 < Theorem proj_expr_unique_ctx_names :
     forall E EA EB Names NA EE NB,
       is_expr E -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE ->
       ctx_names EE Names -> join Names NA -> names EE NB -> NA |{expr}- E ~~> EA ->
       NB |{expr}- E ~~> EB -> EA = EB.

============================
 forall E EA EB Names NA EE NB,
   is_expr E -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE ->
   ctx_names EE Names -> join Names NA -> names EE NB -> NA |{expr}- E ~~> EA ->
   NB |{expr}- E ~~> EB -> EA = EB
 < intros IsE IsNames IsEE Ctxs J N PrA PrB.

Variables: E EA EB Names NA EE NB
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
============================
 EA = EB
 < apply join_is to _ J.

Variables: E EA EB Names NA EE NB
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
============================
 EA = EB
 < apply names_is to _ N.

Variables: E EA EB Names NA EE NB
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 EA = EB
 < apply proj_expr_unique to PrA PrB _ _ _ _ _.

Subgoal 1:

Variables: E EA EB Names NA EE NB
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 forall X, mem X NB -> mem X NA
 < intros MB.

Subgoal 1:

Variables: E EA EB Names NA EE NB X
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
============================
 mem X NA
 < MEE: apply mem_names to N MB.

Subgoal 1:

Variables: E EA EB Names NA EE NB X V
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
MEE : mems (X, V) EE
============================
 mem X NA
 < MN: apply ctx_names_mems_fwd to Ctxs MEE.

Subgoal 1:

Variables: E EA EB Names NA EE NB X V
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
MEE : mems (X, V) EE
MN : mems X Names
============================
 mem X NA
 < apply mems_join to J MN.

Subgoal 1:

Variables: E EA EB Names NA EE NB X V
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
MEE : mems (X, V) EE
MN : mems X Names
H3 : mem X NA
============================
 mem X NA
 < search.

Subgoal 2:

Variables: E EA EB Names NA EE NB
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 forall X, mem X NA -> mem X NB
 < intros MA.

Subgoal 2:

Variables: E EA EB Names NA EE NB X
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
============================
 mem X NB
 < MN: apply mem_join to J MA.

Subgoal 2:

Variables: E EA EB Names NA EE NB X
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
MN : mems X Names
============================
 mem X NB
 < MEE: apply ctx_names_mem_back to Ctxs MN.

Subgoal 2:

Variables: E EA EB Names NA EE NB X V
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
MN : mems X Names
MEE : mems (X, V) EE
============================
 mem X NB
 < apply mems_names to N MEE.

Subgoal 2:

Variables: E EA EB Names NA EE NB X V
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EA
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
MN : mems X Names
MEE : mems (X, V) EE
H3 : mem X NB
============================
 mem X NB
 < search.

Variables: E EB Names NA EE NB
IsE : is_expr E
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{expr}- E ~~> EB
PrB : NB |{expr}- E ~~> EB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 EB = EB
 < search.

Proof completed.
 < Theorem proj_stmt_unique_ctx_names :
     forall S SA SB Names NA EE NB,
       is_stmt S -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE ->
       ctx_names EE Names -> join Names NA -> names EE NB -> NA |{stmt}- S ~~> SA ->
       NB |{stmt}- S ~~> SB -> SA = SB.

============================
 forall S SA SB Names NA EE NB,
   is_stmt S -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE ->
   ctx_names EE Names -> join Names NA -> names EE NB -> NA |{stmt}- S ~~> SA ->
   NB |{stmt}- S ~~> SB -> SA = SB
 < intros IsS IsNames IsEE Ctxs J N PrA PrB.

Variables: S SA SB Names NA EE NB
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
============================
 SA = SB
 < apply join_is to _ J.

Variables: S SA SB Names NA EE NB
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
============================
 SA = SB
 < apply names_is to _ N.

Variables: S SA SB Names NA EE NB
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 SA = SB
 < apply proj_stmt_unique to PrA PrB _ _ _ _ _.

Subgoal 1:

Variables: S SA SB Names NA EE NB
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 forall X, mem X NB -> mem X NA
 < intros MB.

Subgoal 1:

Variables: S SA SB Names NA EE NB X
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
============================
 mem X NA
 < MEE: apply mem_names to N MB.

Subgoal 1:

Variables: S SA SB Names NA EE NB X V
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
MEE : mems (X, V) EE
============================
 mem X NA
 < MN: apply ctx_names_mems_fwd to Ctxs MEE.

Subgoal 1:

Variables: S SA SB Names NA EE NB X V
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
MEE : mems (X, V) EE
MN : mems X Names
============================
 mem X NA
 < apply mems_join to J MN.

Subgoal 1:

Variables: S SA SB Names NA EE NB X V
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MB : mem X NB
MEE : mems (X, V) EE
MN : mems X Names
H3 : mem X NA
============================
 mem X NA
 < search.

Subgoal 2:

Variables: S SA SB Names NA EE NB
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 forall X, mem X NA -> mem X NB
 < intros MA.

Subgoal 2:

Variables: S SA SB Names NA EE NB X
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
============================
 mem X NB
 < MN: apply mem_join to J MA.

Subgoal 2:

Variables: S SA SB Names NA EE NB X
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
MN : mems X Names
============================
 mem X NB
 < MEE: apply ctx_names_mem_back to Ctxs MN.

Subgoal 2:

Variables: S SA SB Names NA EE NB X V
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
MN : mems X Names
MEE : mems (X, V) EE
============================
 mem X NB
 < apply mems_names to N MEE.

Subgoal 2:

Variables: S SA SB Names NA EE NB X V
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SA
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
MA : mem X NA
MN : mems X Names
MEE : mems (X, V) EE
H3 : mem X NB
============================
 mem X NB
 < search.

Variables: S SB Names NA EE NB
IsS : is_stmt S
IsNames : is_list (is_list is_string) Names
IsEE : is_list (is_list (is_pair is_string is_value)) EE
Ctxs : ctx_names EE Names
J : join Names NA
N : names EE NB
PrA : NA |{stmt}- S ~~> SB
PrB : NB |{stmt}- S ~~> SB
H1 : is_list is_string NA
H2 : is_list is_string NB
============================
 SB = SB
 < search.

Proof completed.
 < Theorem ctx_names_scopes_same :
     forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N -> scopes_same EE_A EE_B -> ctx_names EE_A N.

============================
 forall N EE_A EE_B,
   is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
   ctx_names EE_B N -> scopes_same EE_A EE_B -> ctx_names EE_A N
 < induction on 3.

IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
============================
 forall N EE_A EE_B,
   is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
   ctx_names EE_B N @ -> scopes_same EE_A EE_B -> ctx_names EE_A N
 < intros IsA IsB CN SS.

Variables: N EE_A EE_B
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
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
CN : ctx_names EE_B N @
SS : scopes_same EE_A EE_B
============================
 ctx_names EE_A N
 < CN: case CN.

Subgoal 1:

Variables: EE_A
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) []
SS : scopes_same EE_A []
============================
 ctx_names EE_A []
 < case SS.

Subgoal 1:

IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) []
IsB : is_list (is_list (is_pair is_string is_value)) []
============================
 ctx_names [] []
 < search.

Subgoal 2:

Variables: EE_A BRest B ARest A
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) EE_A
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
SS : scopes_same EE_A (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
============================
 ctx_names EE_A (B::BRest)
 < SS: case SS.

Subgoal 2:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
============================
 ctx_names (A1::ARest1) (B::BRest)
 < unfold .

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
============================
 forall K I, mem (K, I) A1 -> mem K B
 < intros MA1.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
============================
 mem K B
 < IsA: case IsA.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1
============================
 mem K B
 < IsP: apply mem_is to _ MA1.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1
IsP : is_pair is_string is_value (K, I)
============================
 mem K B
 < case IsP.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1
H1 : is_string K
H2 : is_value I
============================
 mem K B
 < L: apply mem_lookup to IsA MA1.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I V'
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1
H1 : is_string K
H2 : is_value I
L : lookup A1 K V'
============================
 mem K B
 < LA: apply SS to L.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I V'
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1
H1 : is_string K
H2 : is_value I
L : lookup A1 K V'
LA : lookup A K V'
============================
 mem K B
 < apply lookup_mem to LA.

Subgoal 2.1:

Variables: BRest B ARest A ARest1 A1 K I V'
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MA1 : mem (K, I) A1
IsA : is_list (is_pair is_string is_value) A1
IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1
H1 : is_string K
H2 : is_value I
L : lookup A1 K V'
LA : lookup A K V'
H3 : mem (K, V') A
============================
 mem K B
 < backchain CN.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
============================
 forall K, mem K B -> exists I, mem (K, I) A1
 < intros MB.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
============================
 exists I, mem (K, I) A1
 < MA: apply CN1 to MB.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
============================
 exists I, mem (K, I) A1
 < IsB: case IsB.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
IsB : is_list (is_pair is_string is_value) A
IsB1 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 exists I, mem (K, I) A1
 < IsP: apply mem_is to _ MA.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
IsB : is_list (is_pair is_string is_value) A
IsB1 : is_list (is_list (is_pair is_string is_value)) ARest
IsP : is_pair is_string is_value (K, I)
============================
 exists I, mem (K, I) A1
 < case IsP.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
IsB : is_list (is_pair is_string is_value) A
IsB1 : is_list (is_list (is_pair is_string is_value)) ARest
H1 : is_string K
H2 : is_value I
============================
 exists I, mem (K, I) A1
 < L: apply mem_lookup to _ MA.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I V'
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
IsB : is_list (is_pair is_string is_value) A
IsB1 : is_list (is_list (is_pair is_string is_value)) ARest
H1 : is_string K
H2 : is_value I
L : lookup A K V'
============================
 exists I, mem (K, I) A1
 < L': apply SS1 to L.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I V'
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
IsB : is_list (is_pair is_string is_value) A
IsB1 : is_list (is_list (is_pair is_string is_value)) ARest
H1 : is_string K
H2 : is_value I
L : lookup A K V'
L' : lookup A1 K V'
============================
 exists I, mem (K, I) A1
 < apply lookup_mem to L'.

Subgoal 2.2:

Variables: BRest B ARest A ARest1 A1 K I V'
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
MB : mem K B
MA : mem (K, I) A
IsB : is_list (is_pair is_string is_value) A
IsB1 : is_list (is_list (is_pair is_string is_value)) ARest
H1 : is_string K
H2 : is_value I
L : lookup A K V'
L' : lookup A1 K V'
H3 : mem (K, V') A1
============================
 exists I, mem (K, I) A1
 < search.

Subgoal 2.3:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
============================
 ctx_names ARest1 BRest
 < case IsA.

Subgoal 2.3:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest)
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
H1 : is_list (is_pair is_string is_value) A1
H2 : is_list (is_list (is_pair is_string is_value)) ARest1
============================
 ctx_names ARest1 BRest
 < case IsB.

Subgoal 2.3:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
H1 : is_list (is_pair is_string is_value) A1
H2 : is_list (is_list (is_pair is_string is_value)) ARest1
H3 : is_list (is_pair is_string is_value) A
H4 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 ctx_names ARest1 BRest
 < apply IH to _ _ CN2 SS2.

Subgoal 2.3:

Variables: BRest B ARest A ARest1 A1
IH : forall N EE_A EE_B,
       is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B ->
       ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N
CN : forall K I, mem (K, I) A -> mem K B
CN1 : forall K, mem K B -> exists I, mem (K, I) A
CN2 : ctx_names ARest BRest *
SS : forall X V, lookup A1 X V -> lookup A X V
SS1 : forall X V, lookup A X V -> lookup A1 X V
SS2 : scopes_same ARest1 ARest
H1 : is_list (is_pair is_string is_value) A1
H2 : is_list (is_list (is_pair is_string is_value)) ARest1
H3 : is_list (is_pair is_string is_value) A
H4 : is_list (is_list (is_pair is_string is_value)) ARest
H5 : ctx_names ARest1 BRest
============================
 ctx_names ARest1 BRest
 < search.

Proof completed.
 < Extensible_Theorem
      evalExpr_trans_ctx_names : forall Names E T FE EE V EE' O,
         IsE : is_expr 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 ->
         IsNames : is_list (is_list is_string) Names ->
         Ctxs : ctx_names EE Names ->
         Trans : transE Names E T ->
         Ev : evalExpr FE EE E V EE' O ->
         ctx_names EE' Names
      on Ev as IH_E,
      evalStmt_trans_ctx_names : forall Names S T Names' FE Scope EE EE' O,
         IsS : is_stmt S ->
         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)) (Scope::EE) ->
         IsNames : is_list (is_list is_string) Names ->
         Ctxs : ctx_names (Scope::EE) Names ->
         Trans : transS Names S T Names' ->
         Ev : evalStmt FE (Scope::EE) S EE' O ->
         ctx_names EE' Names'
      on Ev as IH_S,
      evalArgs_trans_ctx_names : forall Names A T FE EE V EE' O,
         IsA : is_args A ->
         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 ->
         IsNames : is_list (is_list is_string) Names ->
         Ctxs : ctx_names EE Names ->
         Trans : transA Names A T ->
         Ev : evalArgs FE EE A V EE' O ->
         ctx_names EE' Names
      on Ev as IH_A,
      evalRecFields_trans_ctx_names : forall Names RF T FE EE V EE' O,
         IsRF : is_recFieldExprs RF ->
         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 ->
         IsNames : is_list (is_list is_string) Names ->
         Ctxs : ctx_names EE Names ->
         Trans : transRF Names RF T ->
         Ev : evalRecFields FE EE RF V EE' O ->
         ctx_names EE' Names
      on Ev as IH_RF.

Subgoal 1:

Variables: Names E T FE EE V EE' O
IsE : is_expr 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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names E T
Ev : evalExpr FE EE E V EE' O
============================
 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)
 < search.

Subgoal 2:

Variables: Names S T Names' FE Scope EE EE' O
IsS : is_stmt S
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names S T Names'
Ev : evalStmt FE (Scope::EE) S EE' O
============================
 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) /\ is_stmt S)
 < search.

Subgoal 3:

Variables: Names A T FE EE V EE' O
IsA : is_args A
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transA Names A T
Ev : evalArgs FE EE A V EE' O
============================
 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)
 < search.

Subgoal 4:

Variables: Names RF T FE EE V EE' O
IsRF : is_recFieldExprs RF
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transRF Names RF T
Ev : evalRecFields FE EE RF V EE' O
============================
 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)
 < search.

Subgoal 5.1.1:

Variables: Names T FE EE' I
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (num I)
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transE Names (num I) T
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.2:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (plus E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.2:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.2:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.2:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.2:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.2:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.3:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (minus E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.3:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.3:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.3:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.3:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.3:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.4:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (mult E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.4:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.4:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.4:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.4:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.4:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.5:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (div E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.5:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.5:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.5:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.5:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.5:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.6:

Variables: Names T FE EE'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr true
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transE Names true T
Ev : evalExpr FE EE' true trueVal EE' [] @
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.7:

Variables: Names T FE EE'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr false
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transE Names false T
Ev : evalExpr FE EE' false falseVal EE' [] @
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.8:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (and E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.8:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.8:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.8:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.8:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.8:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.9:

Variables: Names T FE EE EE' O E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (and E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.9:

Variables: Names T FE EE EE' O E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.9:

Variables: Names FE EE EE' O E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.9:

Variables: Names FE EE EE' O E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.10:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (and E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.10:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.10:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.10:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.10:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.10:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.11:

Variables: Names T FE EE EE' O E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (or E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.11:

Variables: Names T FE EE EE' O E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.11:

Variables: Names FE EE EE' O E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.11:

Variables: Names FE EE EE' O E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.12:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (or E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.12:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.12:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.12:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.12:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.12:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.13:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (or E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.13:

Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.13:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.13:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.13:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.13:

Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.14:

Variables: Names T FE EE EE' O E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (not 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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.14:

Variables: Names T FE EE EE' O E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.14:

Variables: Names FE EE EE' O E1 E3
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.14:

Variables: Names FE EE EE' O E1 E3
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
H2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.15:

Variables: Names T FE EE EE' O E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (not 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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.15:

Variables: Names T FE EE EE' O E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.15:

Variables: Names FE EE EE' O E1 E3
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.15:

Variables: Names FE EE EE' O E1 E3
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
H2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.16:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (greater E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.16:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.16:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.16:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.16:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.16:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.17:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (greater E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.17:

Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.17:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.17:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.17:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.17:

Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.18:

Variables: Names T FE EE EE' O V1 EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (eq E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.18:

Variables: Names T FE EE EE' O V1 EE3 O2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.18:

Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.18:

Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.18:

Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.18:

Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.19:

Variables: Names T FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (eq E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.19:

Variables: Names T FE EE EE' O V1 EE3 O2 V2 O3 E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.19:

Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.19:

Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.19:

Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.19:

Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.20:

Variables: Names T FE EE' S
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (stringLit S)
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transE Names (stringLit S) T
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.21:

Variables: Names T FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (appString E1 E2)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.21:

Variables: Names T FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.21:

Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.21:

Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.21:

Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.21:

Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : is_list (is_list (is_pair is_string is_value)) EE3
Ctxs1 : ctx_names EE3 Names
Ctxs2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.22:

Variables: Names T FE V EE' X
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (name X)
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transE Names (name X) T
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.23:

Variables: Names T FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (call Fun Args)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.23:

Variables: Names T FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.23:

Variables: Names FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
============================
 ctx_names EE' Names
 < apply IH_A to _ _ _ _ _ Trans Ev2.

Subgoal 5.1.23:

Variables: Names FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
H3 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.24:

Variables: Names T FE EE V EE' O EE3 O2 Scope O3 E1 S
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (stmtExpr S 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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.24:

Variables: Names T FE EE V EE' O EE3 O2 Scope O3 E1 S
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
============================
 ctx_names EE' Names
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < apply ctx_names_add_scope to Ctxs.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names ([]::EE) ([]::Names)
============================
 ctx_names EE' Names
 < apply IH_S to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names ([]::EE) ([]::Names)
H5 : ctx_names EE3 Names2
============================
 ctx_names EE' Names
 < apply transS_isNames to _ _ Trans.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names ([]::EE) ([]::Names)
H5 : ctx_names EE3 Names2
H6 : is_list (is_list is_string) Names2
============================
 ctx_names EE' Names
 < Ctxs': apply IH_E to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names ([]::EE) ([]::Names)
H5 : ctx_names EE3 Names2
H6 : is_list (is_list is_string) Names2
Ctxs' : ctx_names (Scope::EE') Names2
============================
 ctx_names EE' Names
 < case Ctxs'.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S E3 S2 BRest B
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 (B::BRest)
Trans1 : transE (B::BRest) E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names ([]::EE) ([]::Names)
H5 : ctx_names EE3 (B::BRest)
H6 : is_list (is_list is_string) (B::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE' BRest
============================
 ctx_names EE' Names
 < apply transS_old_scopes to _ _ Trans.

Subgoal 5.1.24:

Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S E3 S2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 (Scope'::Names)
Trans1 : transE (Scope'::Names) E1 E3
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names ([]::EE) ([]::Names)
H5 : ctx_names EE3 (Scope'::Names)
H6 : is_list (is_list is_string) (Scope'::Names)
H7 : forall K I, mem (K, I) Scope -> mem K Scope'
H8 : forall K, mem K Scope' -> exists I, mem (K, I) Scope
H9 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.25:

Variables: Names T FE EE EE' O VF RF
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (recBuild RF)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.25:

Variables: Names T FE EE EE' O VF RF
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.25:

Variables: Names FE EE EE' O VF RF RF2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
============================
 ctx_names EE' Names
 < apply IH_RF to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.25:

Variables: Names FE EE EE' O VF RF RF2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
H2 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.26:

Variables: Names T FE EE V EE' O Fields F Rec
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr (recFieldAccess Rec F)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 ctx_names EE' Names
 < case IsE.

Subgoal 5.1.26:

Variables: Names T FE EE V EE' O Fields F Rec
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.26:

Variables: Names FE EE V EE' O Fields F Rec E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.26:

Variables: Names FE EE V EE' O Fields F Rec E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
H3 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transE Names <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
============================
 ctx_names EE' Names
 < apply join_is to _ Trans.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
H1 : is_list is_string N
============================
 ctx_names EE' Names
 < apply proj_expr_is to Trans1 _ _.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
H1 : is_list is_string N
H2 : is_expr E_P1
============================
 ctx_names EE' Names
 < apply proj_expr_unique_ctx_names to _ _ _ _ Trans Ev1 Trans1 Ev2.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
============================
 ctx_names EE' Names
 < C: apply IH_E to _ _ _ _ _ Trans2 Ev3.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
C : ctx_names EE_P Names
============================
 ctx_names EE' Names
 < SS: apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.1.27:

Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N EE''
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
C : ctx_names EE_P Names
SS : evalExpr FE EE E_P V EE'' O
SS1 : scopes_same EE' EE''
============================
 ctx_names EE' Names
 < apply evalExpr_unique to _ _ _ SS Ev3.

Subgoal 5.1.27:

Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
C : ctx_names EE_P Names
SS : evalExpr FE EE E_P V_P EE_P O_P
SS1 : scopes_same EE' EE_P
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ SS.

Subgoal 5.1.27:

Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
C : ctx_names EE_P Names
SS : evalExpr FE EE E_P V_P EE_P O_P
SS1 : scopes_same EE' EE_P
H3 : is_list (is_list (is_pair is_string is_value)) EE_P
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 5.1.27:

Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
C : ctx_names EE_P Names
SS : evalExpr FE EE E_P V_P EE_P O_P
SS1 : scopes_same EE' EE_P
H3 : is_list (is_list (is_pair is_string is_value)) EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 ctx_names EE' Names
 < apply ctx_names_scopes_same to _ _ C SS1.

Subgoal 5.1.27:

Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsE : is_expr <unknown K evalExpr>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string N
H2 : is_expr E_P
C : ctx_names EE_P Names
SS : evalExpr FE EE E_P V_P EE_P O_P
SS1 : scopes_same EE' EE_P
H3 : is_list (is_list (is_pair is_string is_value)) EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.2.1:

Variables: Names T Names' FE Scope EE
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt noop
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names noop T Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 ctx_names (Scope::EE) Names'
 < case Trans.

Subgoal 5.2.1:

Variables: Names' FE Scope EE
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt noop
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 ctx_names (Scope::EE) Names'
 < search.

Subgoal 5.2.2:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (seq S1 S2)
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.2:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
============================
 ctx_names EE' Names'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names'
 < apply transS_isNames to _ _ Trans.

Subgoal 5.2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list is_string) Names3
============================
 ctx_names EE' Names'
 < C: apply IH_S to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.2:

Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list is_string) Names3
C : ctx_names EE3 Names3
============================
 ctx_names EE' Names'
 < case Ctxs (keep).

Subgoal 5.2.2:

Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 BRest B
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B::BRest)
Ctxs : ctx_names (Scope::EE) (B::BRest)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list is_string) Names3
C : ctx_names EE3 Names3
H5 : forall K I, mem (K, I) Scope -> mem K B
H6 : forall K, mem K B -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans.

Subgoal 5.2.2:

Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 S21 S11 BRest B Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B::BRest)
Ctxs : ctx_names (Scope::EE) (B::BRest)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_list (is_list is_string) (Scope'::BRest)
C : ctx_names EE3 (Scope'::BRest)
H5 : forall K I, mem (K, I) Scope -> mem K B
H6 : forall K, mem K B -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest
============================
 ctx_names EE' Names'
 < case C (keep).

Subgoal 5.2.2:

Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B::BRest)
Ctxs : ctx_names (Scope::EE) (B::BRest)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list is_string) (Scope'::BRest)
C : ctx_names (A::ARest) (Scope'::BRest)
H5 : forall K I, mem (K, I) Scope -> mem K B
H6 : forall K, mem K B -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest
H8 : forall K I, mem (K, I) A -> mem K Scope'
H9 : forall K, mem K Scope' -> exists I, mem (K, I) A
H10 : ctx_names ARest BRest
============================
 ctx_names EE' Names'
 < apply IH_S to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.2.2:

Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B::BRest)
Ctxs : ctx_names (Scope::EE) (B::BRest)
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_list (is_list is_string) (Scope'::BRest)
C : ctx_names (A::ARest) (Scope'::BRest)
H5 : forall K I, mem (K, I) Scope -> mem K B
H6 : forall K, mem K B -> exists I, mem (K, I) Scope
H7 : ctx_names EE BRest
H8 : forall K I, mem (K, I) A -> mem K Scope'
H9 : forall K, mem K Scope' -> exists I, mem (K, I) A
H10 : ctx_names ARest BRest
H11 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.3:

Variables: Names T Names' FE Scope EE O EE2 Scope1 V X E Ty
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (declare Ty X 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 ctx_names (((X, V)::Scope1)::EE2) Names'
 < case IsS.

Subgoal 5.2.3:

Variables: Names T Names' FE Scope EE O EE2 Scope1 V X E Ty
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 ctx_names (((X, V)::Scope1)::EE2) Names'
 < Trans: case Trans.

Subgoal 5.2.3:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
============================
 ctx_names (((X, V)::Scope1)::EE2) ((X::Scope2)::Names1)
 < C: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.3:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : ctx_names (Scope1::EE2) (Scope2::Names1)
============================
 ctx_names (((X, V)::Scope1)::EE2) ((X::Scope2)::Names1)
 < C: case C.

Subgoal 5.2.3:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
============================
 ctx_names (((X, V)::Scope1)::EE2) ((X::Scope2)::Names1)
 < unfold .

Subgoal 5.2.3.1:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
============================
 forall K I, mem (K, I) ((X, V)::Scope1) -> mem K (X::Scope2)
 < intros M.

Subgoal 5.2.3.1:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
M : mem (K, I) ((X, V)::Scope1)
============================
 mem K (X::Scope2)
 < M: case M.

Subgoal 5.2.3.1.1:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
============================
 mem X (X::Scope2)
 < search.

Subgoal 5.2.3.1.2:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
M : mem (K, I) Scope1
============================
 mem K (X::Scope2)
 < apply C to M.

Subgoal 5.2.3.1.2:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
M : mem (K, I) Scope1
H4 : mem K Scope2
============================
 mem K (X::Scope2)
 < search.

Subgoal 5.2.3.2:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
============================
 forall K, mem K (X::Scope2) -> exists I, mem (K, I) ((X, V)::Scope1)
 < intros M.

Subgoal 5.2.3.2:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
M : mem K (X::Scope2)
============================
 exists I, mem (K, I) ((X, V)::Scope1)
 < M: case M.

Subgoal 5.2.3.2.1:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
============================
 exists I, mem (X, I) ((X, V)::Scope1)
 < search.

Subgoal 5.2.3.2.2:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
M : mem K Scope2
============================
 exists I, mem (K, I) ((X, V)::Scope1)
 < apply C1 to M.

Subgoal 5.2.3.2.2:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
M : mem K Scope2
H4 : mem (K, I) Scope1
============================
 exists I, mem (K, I) ((X, V)::Scope1)
 < search.

Subgoal 5.2.3.3:

Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (Scope2::Names1)
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
C : forall K I, mem (K, I) Scope1 -> mem K Scope2
C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1
C2 : ctx_names EE2 Names1
============================
 ctx_names EE2 Names1
 < search.

Subgoal 5.2.4:

Variables: Names T Names' FE Scope EE EE' O V EE3 E X
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (assign X 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.4:

Variables: Names T Names' FE Scope EE EE' O V EE3 E X
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.4:

Variables: Names' FE Scope EE EE' O V EE3 E X E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
============================
 ctx_names EE' Names'
 < C: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.4:

Variables: Names' FE Scope EE EE' O V EE3 E X E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
C : ctx_names EE3 Names'
============================
 ctx_names EE' Names'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.4:

Variables: Names' FE Scope EE EE' O V EE3 E X E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
C : ctx_names EE3 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names'
 < apply ctx_names_replaceScopes to _ _ C Ev2.

Subgoal 5.2.4:

Variables: Names' FE Scope EE EE' O V EE3 E X E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
C : ctx_names EE3 Names'
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.5:

Variables: Names T Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (recUpdate Rec Fields 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.5:

Variables: Names T Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.5:

Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
============================
 ctx_names EE' Names'
 < C: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.5:

Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
C : ctx_names EE3 Names'
============================
 ctx_names EE' Names'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.5:

Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
C : ctx_names EE3 Names'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names'
 < apply ctx_names_replaceScopes to _ _ C Ev4.

Subgoal 5.2.5:

Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
C : ctx_names EE3 Names'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.6:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (ifThenElse Cond Th El)
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.6:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 ctx_names EE' Names'
 < C: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
============================
 ctx_names EE' Names'
 < C+: apply ctx_names_add_scope to C.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
============================
 ctx_names EE' Names'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names'
 < C': apply IH_S to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
C' : ctx_names (Scope1::EE') NamesTh
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans1.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 (Scope'::Names')
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
C' : ctx_names (Scope1::EE') (Scope'::Names')
============================
 ctx_names EE' Names'
 < case C'.

Subgoal 5.2.6:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 (Scope'::Names')
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : forall K I, mem (K, I) Scope1 -> mem K Scope'
H6 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H7 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.7:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (ifThenElse Cond Th El)
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.7:

Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 ctx_names EE' Names'
 < C: apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
============================
 ctx_names EE' Names'
 < C+: apply ctx_names_add_scope to C.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
============================
 ctx_names EE' Names'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names'
 < C': apply IH_S to _ _ _ _ _ Trans2 Ev2.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
C' : ctx_names (Scope1::EE') NamesEl
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 (Scope'::Names')
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
C' : ctx_names (Scope1::EE') (Scope'::Names')
============================
 ctx_names EE' Names'
 < case C'.

Subgoal 5.2.7:

Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 (Scope'::Names')
C : ctx_names EE3 Names'
C+ : ctx_names ([]::EE3) ([]::Names')
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : forall K I, mem (K, I) Scope1 -> mem K Scope'
H6 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H7 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.8:

Variables: Names T Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (while Cond Body)
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.8:

Variables: Names T Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 ctx_names EE' Names'
 < Trans: case Trans (keep).

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 ctx_names EE' Names'
 < C: apply IH_E to _ _ _ _ _ Trans1 Ev1.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
C : ctx_names EE2 Names'
============================
 ctx_names EE' Names'
 < C+: apply ctx_names_add_scope to C.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
============================
 ctx_names EE' Names'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 ctx_names EE' Names'
 < C': apply IH_S to _ _ _ _ _ Trans2 Ev2.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C' : ctx_names (Scope1::EE4) Names2
============================
 ctx_names EE' Names'
 < C'': case C'.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 BRest B
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B::BRest)
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K B
C''1 : forall K, mem K B -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 BRest
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'::Names')
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 Names'
============================
 ctx_names EE' Names'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'::Names')
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 Names'
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 ctx_names EE' Names'
 < case IsEE4+.

Subgoal 5.2.8:

Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (Scope'::Names')
C : ctx_names EE2 Names'
C+ : ctx_names ([]::EE2) ([]::Names')
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 Names'
H4 : is_list (is_pair is_string is_value) Scope1
H5 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 ctx_names EE' Names'
 < case Ctxs.

Subgoal 5.2.8:

Variables: FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B1::BRest1)
Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B1::BRest1) Cond Cond2
Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1))
C : ctx_names EE2 (B1::BRest1)
C+ : ctx_names ([]::EE2) ([]::(B1::BRest1))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 (B1::BRest1)
H4 : is_list (is_pair is_string is_value) Scope1
H5 : is_list (is_list (is_pair is_string is_value)) EE4
H6 : forall K I, mem (K, I) Scope -> mem K B1
H7 : forall K, mem K B1 -> exists I, mem (K, I) Scope
H8 : ctx_names EE BRest1
============================
 ctx_names EE' (B1::BRest1)
 < case C''2 (keep).

Subgoal 5.2.8:

Variables: FE Scope EE EE' O EE2 O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B1::BRest1)
Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::(A::ARest)) O3 *
Ev3 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B1::BRest1) Cond Cond2
Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1))
C : ctx_names EE2 (B1::BRest1)
C+ : ctx_names ([]::EE2) ([]::(B1::BRest1))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A::ARest) (B1::BRest1)
H4 : is_list (is_pair is_string is_value) Scope1
H5 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H6 : forall K I, mem (K, I) Scope -> mem K B1
H7 : forall K, mem K B1 -> exists I, mem (K, I) Scope
H8 : ctx_names EE BRest1
H9 : forall K I, mem (K, I) A -> mem K B1
H10 : forall K, mem K B1 -> exists I, mem (K, I) A
H11 : ctx_names ARest BRest1
============================
 ctx_names EE' (B1::BRest1)
 < apply IH_S to _ _ _ _ _ Trans Ev3.

Subgoal 5.2.8:

Variables: FE Scope EE EE' O EE2 O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) (B1::BRest1)
Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::(A::ARest)) O3 *
Ev3 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B1::BRest1) Cond Cond2
Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1))
C : ctx_names EE2 (B1::BRest1)
C+ : ctx_names ([]::EE2) ([]::(B1::BRest1))
H3 : is_list (is_list (is_pair is_string is_value)) EE2
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A::ARest) (B1::BRest1)
H4 : is_list (is_pair is_string is_value) Scope1
H5 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H6 : forall K I, mem (K, I) Scope -> mem K B1
H7 : forall K, mem K B1 -> exists I, mem (K, I) Scope
H8 : ctx_names EE BRest1
H9 : forall K I, mem (K, I) A -> mem K B1
H10 : forall K, mem K B1 -> exists I, mem (K, I) A
H11 : ctx_names ARest BRest1
H12 : ctx_names EE' (B1::BRest1)
============================
 ctx_names EE' (B1::BRest1)
 < search.

Subgoal 5.2.9:

Variables: Names T Names' FE Scope EE EE' O Body Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (while Cond Body)
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.9:

Variables: Names T Names' FE Scope EE EE' O Body Cond
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.9:

Variables: Names' FE Scope EE EE' O Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 ctx_names EE' Names'
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.9:

Variables: Names' FE Scope EE EE' O Body Cond Names2 Body2 Cond2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
H3 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.10:

Variables: Names T Names' FE Scope EE EE' O Scope1 S1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (scopeStmt S1)
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.10:

Variables: Names T Names' FE Scope EE EE' O Scope1 S1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 Names2 S3
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
============================
 ctx_names EE' Names'
 < apply transS_old_scopes to _ _ Trans.

Subgoal 5.2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 (Scope'::Names')
============================
 ctx_names EE' Names'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 5.2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 (Scope'::Names')
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 ctx_names EE' Names'
 < C: apply IH_S to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 (Scope'::Names')
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
C : ctx_names (Scope1::EE') (Scope'::Names')
============================
 ctx_names EE' Names'
 < case C.

Subgoal 5.2.10:

Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 (Scope'::Names')
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
H3 : forall K I, mem (K, I) Scope1 -> mem K Scope'
H4 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H5 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.11:

Variables: Names T Names' FE Scope EE EE' O I O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (printVal 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.11:

Variables: Names T Names' FE Scope EE EE' O I O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.11:

Variables: Names' FE Scope EE EE' O I O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 ctx_names EE' Names'
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.11:

Variables: Names' FE Scope EE EE' O I O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.12:

Variables: Names T Names' FE Scope EE EE' O O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (printVal 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.12:

Variables: Names T Names' FE Scope EE EE' O O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.12:

Variables: Names' FE Scope EE EE' O O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 ctx_names EE' Names'
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.12:

Variables: Names' FE Scope EE EE' O O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.13:

Variables: Names T Names' FE Scope EE EE' O O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (printVal 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.13:

Variables: Names T Names' FE Scope EE EE' O O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.13:

Variables: Names' FE Scope EE EE' O O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 ctx_names EE' Names'
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.13:

Variables: Names' FE Scope EE EE' O O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.14:

Variables: Names T Names' FE Scope EE EE' O S1 O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt (printVal 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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 ctx_names EE' Names'
 < case IsS.

Subgoal 5.2.14:

Variables: Names T Names' FE Scope EE EE' O S1 O2 E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.14:

Variables: Names' FE Scope EE EE' O S1 O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 ctx_names EE' Names'
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.14:

Variables: Names' FE Scope EE EE' O S1 O2 E E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown K evalStmt> T Names'
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 ctx_names EE' Names'
 < Trans: case Trans.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
============================
 ctx_names EE' Names'
 < apply join_is to _ Trans.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
H1 : is_list is_string N
============================
 ctx_names EE' Names'
 < apply proj_stmt_is to Trans1 _ _.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
H1 : is_list is_string N
H2 : is_stmt S_P1
============================
 ctx_names EE' Names'
 < apply proj_stmt_unique_ctx_names to _ _ _ _ Trans Ev1 Trans1 Ev2.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
============================
 ctx_names EE' Names'
 < C: apply IH_S to _ _ _ _ _ Trans2 Ev3.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
C : ctx_names EE_P Names'
============================
 ctx_names EE' Names'
 < SS: apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N EE''
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
C : ctx_names EE_P Names'
SS : evalStmt FE (Scope::EE) S_P EE'' O
SS1 : scopes_same EE' EE''
============================
 ctx_names EE' Names'
 < apply evalStmt_unique to _ _ _ SS Ev3.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
C : ctx_names EE_P Names'
SS : evalStmt FE (Scope::EE) S_P EE_P O_P
SS1 : scopes_same EE' EE_P
============================
 ctx_names EE' Names'
 < apply evalStmt_isCtx to _ _ _ SS.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
C : ctx_names EE_P Names'
SS : evalStmt FE (Scope::EE) S_P EE_P O_P
SS1 : scopes_same EE' EE_P
H3 : is_list (is_list (is_pair is_string is_value)) EE_P
============================
 ctx_names EE' Names'
 < apply evalStmt_isCtx to _ _ _ Ev.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
C : ctx_names EE_P Names'
SS : evalStmt FE (Scope::EE) S_P EE_P O_P
SS1 : scopes_same EE' EE_P
H3 : is_list (is_list (is_pair is_string is_value)) EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 ctx_names EE' Names'
 < apply ctx_names_scopes_same to _ _ C SS1.

Subgoal 5.2.15:

Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsS : is_stmt <unknown K evalStmt>
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)) (Scope::EE)
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string N
H2 : is_stmt S_P
C : ctx_names EE_P Names'
SS : evalStmt FE (Scope::EE) S_P EE_P O_P
SS1 : scopes_same EE' EE_P
H3 : is_list (is_list (is_pair is_string is_value)) EE_P
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : ctx_names EE' Names'
============================
 ctx_names EE' Names'
 < search.

Subgoal 5.3.1:

Variables: Names T FE EE'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsA : is_args nilArgs
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transA Names nilArgs T
Ev : evalArgs FE EE' nilArgs [] EE' [] @
============================
 ctx_names EE' Names
 < search.

Subgoal 5.3.2:

Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsA : is_args (consArgs E Rest)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsA.

Subgoal 5.3.2:

Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 Rest E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.3.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.3.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.3.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < apply IH_A to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.3.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : ctx_names EE3 Names
H5 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.3.3:

Variables: Names T FE EE V EE' O
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsA : is_args <unknown K evalArgs>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
============================
 ctx_names EE' Names
 < Or: apply is_args_nilArgs_or_consArgs to IsA.

Subgoal 5.3.3:

Variables: Names T FE EE V EE' O
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsA : is_args <unknown K evalArgs>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
Or : <unknown K evalArgs> = nilArgs \/
     (exists E A', <unknown K evalArgs> = consArgs E A')
============================
 ctx_names EE' Names
 < case Or.

Subgoal 5.4.1:

Variables: Names T FE EE'
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsRF : is_recFieldExprs nilRecFieldExprs
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'
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE' Names
Trans : transRF Names nilRecFieldExprs T
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
============================
 ctx_names EE' Names
 < search.

Subgoal 5.4.2:

Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 ctx_names EE' Names
 < case IsRF.

Subgoal 5.4.2:

Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 F Rest E
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 ctx_names EE' Names
 < Trans: case Trans.

Subgoal 5.4.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
============================
 ctx_names EE' Names
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.4.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 ctx_names EE' Names
 < apply IH_E to _ _ _ _ _ Trans Ev1.

Subgoal 5.4.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : ctx_names EE3 Names
============================
 ctx_names EE' Names
 < apply IH_RF to _ _ _ _ _ Trans1 Ev2.

Subgoal 5.4.2:

Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : ctx_names EE3 Names
H6 : ctx_names EE' Names
============================
 ctx_names EE' Names
 < search.

Subgoal 5.4.3:

Variables: Names T FE EE V EE' O
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsRF : is_recFieldExprs <unknown K evalRecFields>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
============================
 ctx_names EE' Names
 < Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF.

Subgoal 5.4.3:

Variables: Names T FE EE V EE' O
IH_E : forall Names E T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         ctx_names EE' Names
IH_S : forall Names S T Names' FE Scope 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)) (Scope::EE) -> is_list (is_list is_string) Names ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         ctx_names EE' Names'
IH_A : forall Names A T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         ctx_names EE' Names
IH_RF : forall Names RF T FE EE V EE' 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 -> is_list (is_list is_string) Names ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          ctx_names EE' Names
IsRF : is_recFieldExprs <unknown K evalRecFields>
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
IsNames : is_list (is_list is_string) Names
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
Or : <unknown K evalRecFields> = nilRecFieldExprs \/
     (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF')
============================
 ctx_names EE' Names
 < case Or.

Proof completed.
 < Define rel_FE :
             (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) ->
             (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) ->
             prop by
   rel_FE FE FE_T :=
     (forall F RetVar RVVal PNames Body,
       lookup FE F (RetVar, RVVal, PNames, Body) -> exists Body_T Names,
         lookup FE_T F (RetVar, RVVal, PNames, Body_T) /\
         transS [RetVar::PNames] Body Body_T Names) /\
     (forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, RVVal, PNames, Body_T) -> exists Body Names,
         lookup FE F (RetVar, RVVal, PNames, Body) /\
         transS [RetVar::PNames] Body Body_T Names).


 < Theorem zip_ctx_names  [A, B] :
     forall A B (Z : list (pair A B)), zip A B Z -> ctx_names [Z] [A].

============================
 forall A B Z, zip A B Z -> ctx_names [Z] [A]
 < intros Z.

Variables: A B Z
Z : zip A B Z
============================
 ctx_names [Z] [A]
 < unfold .

Subgoal 1:

Variables: A B Z
Z : zip A B Z
============================
 forall K I, mem (K, I) Z -> mem K A
 < intros M.

Subgoal 1:

Variables: A B Z K I
Z : zip A B Z
M : mem (K, I) Z
============================
 mem K A
 < apply zip_mem_after to Z M.

Subgoal 1:

Variables: A B Z K I
Z : zip A B Z
M : mem (K, I) Z
H1 : mem K A
H2 : mem I B
============================
 mem K A
 < search.

Subgoal 2:

Variables: A B Z
Z : zip A B Z
============================
 forall K, mem K A -> exists I, mem (K, I) Z
 < intros M.

Subgoal 2:

Variables: A B Z K
Z : zip A B Z
M : mem K A
============================
 exists I, mem (K, I) Z
 < apply zip_mem_before1 to Z M.

Subgoal 2:

Variables: A B Z K B1
Z : zip A B Z
M : mem K A
H1 : mem (K, B1) Z
============================
 exists I, mem (K, I) Z
 < search.

Subgoal 3:

Variables: A B Z
Z : zip A B Z
============================
 ctx_names [] []
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalExpr_same : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         IsE : is_expr 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 ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transE Names E T ->
         Ev : evalExpr FE EE E V EE' O ->
         EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ->
         V = V_T /\
         O = O_T
      on Ev as IH_E,
      trans_evalExpr_relCtxs : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         IsE : is_expr 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 ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transE Names E T ->
         Ev : evalExpr FE EE E V EE' O ->
         EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ->
         scopes_same EE' EE_T'
      on Ev as IH_E_C,
      trans_evalStmt_same : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         IsS : is_stmt S ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same (Scope::EE) EE_T ->
         Ctxs : ctx_names (Scope::EE) Names ->
         Trans : transS Names S T Names' ->
         Ev : evalStmt FE (Scope::EE) S EE' O ->
         EvT : evalStmt FE_T EE_T T EE_T' O_T ->
         O = O_T
      on Ev as IH_S,
      trans_evalStmt_relCtxs : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         IsS : is_stmt S ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same (Scope::EE) EE_T ->
         Ctxs : ctx_names (Scope::EE) Names ->
         Trans : transS Names S T Names' ->
         Ev : evalStmt FE (Scope::EE) S EE' O ->
         EvT : evalStmt FE_T EE_T T EE_T' O_T ->
         scopes_same EE' EE_T'
      on Ev as IH_S_C,
      trans_evalArgs_same : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         IsA : is_args A ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transA Names A T ->
         Ev : evalArgs FE EE A V EE' O ->
         EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ->
         V = V_T /\
         O = O_T
      on Ev as IH_A,
      trans_evalArgs_relCtxs : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         IsA : is_args A ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transA Names A T ->
         Ev : evalArgs FE EE A V EE' O ->
         EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ->
         scopes_same EE' EE_T'
      on Ev as IH_A_C,
      trans_evalRecFields_same : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         IsRF : is_recFieldExprs RF ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transRF Names RF T ->
         Ev : evalRecFields FE EE RF V EE' O ->
         EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ->
         V = V_T /\
         O = O_T
      on Ev as IH_RF,
      trans_evalRecFields_relCtxs : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         IsRF : is_recFieldExprs RF ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transRF Names RF T ->
         Ev : evalRecFields FE EE RF V EE' O ->
         EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ->
         scopes_same EE' EE_T'
      on Ev as IH_RF_C.

Subgoal 1:

Variables: E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IsE : is_expr 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names E T
Ev : evalExpr FE EE E V EE' O
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 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)
 < search.

Subgoal 2:

Variables: E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IsE : is_expr 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names E T
Ev : evalExpr FE EE E V EE' O
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 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)
 < search.

Subgoal 3:

Variables: S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T
IsS : is_stmt S
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names S T Names'
Ev : evalStmt FE (Scope::EE) S EE' O
EvT : evalStmt FE_T EE_T T EE_T' O_T
============================
 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) /\ is_stmt S)
 < search.

Subgoal 4:

Variables: S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T
IsS : is_stmt S
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names S T Names'
Ev : evalStmt FE (Scope::EE) S EE' O
EvT : evalStmt FE_T EE_T T EE_T' O_T
============================
 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) /\ is_stmt S)
 < search.

Subgoal 5:

Variables: A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IsA : is_args A
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names A T
Ev : evalArgs FE EE A V EE' O
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
============================
 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)
 < search.

Subgoal 6:

Variables: A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IsA : is_args A
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names A T
Ev : evalArgs FE EE A V EE' O
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
============================
 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)
 < search.

Subgoal 7:

Variables: RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IsRF : is_recFieldExprs RF
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names RF T
Ev : evalRecFields FE EE RF V EE' O
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
============================
 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)
 < search.

Subgoal 8:

Variables: RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IsRF : is_recFieldExprs RF
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names RF T
Ev : evalRecFields FE EE RF V EE' O
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
============================
 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)
 < search.

Subgoal 9.1.1:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T I
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (num I) T
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 intVal I = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.1.1:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T I
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
EvT : evalExpr FE_T EE_T (num I) V_T EE_T' O_T
============================
 intVal I = V_T /\ [] = O_T
 < case EvT.

Subgoal 9.1.1:

Variables: Names FE FE_T EE' EE_T' I
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
============================
 intVal I = intVal I /\ [] = []
 < search.

Subgoal 9.1.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (plus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 intVal I = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (plus E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 intVal I = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 + I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 + I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 + I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 intVal I = intVal I3 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 + I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 + I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 + I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 + I5 = I
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 + I5 = I
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O_T = O_T
 < apply plus_integer_unique to Ev3 EvT2.

Subgoal 9.1.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I3) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 + I5 = I3
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I3 = intVal I3 /\ O_T = O_T
 < search.

Subgoal 9.1.3:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (minus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 intVal I = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.3:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (minus E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 intVal I = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 - I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 - I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 - I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 intVal I = intVal I3 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 - I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 - I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 - I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 - I5 = I
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 - I5 = I
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O_T = O_T
 < apply minus_integer_unique to Ev3 EvT2.

Subgoal 9.1.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I3) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 - I5 = I3
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I3 = intVal I3 /\ O_T = O_T
 < search.

Subgoal 9.1.4:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (mult E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 intVal I = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.4:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (mult E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 intVal I = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 * I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 * I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 * I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 intVal I = intVal I3 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 * I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 * I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 * I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 * I5 = I
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 * I5 = I
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O_T = O_T
 < apply multiply_integer_unique to Ev3 EvT2.

Subgoal 9.1.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I3) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 * I5 = I3
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I3 = intVal I3 /\ O_T = O_T
 < search.

Subgoal 9.1.5:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (div E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 intVal I = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.5:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 intVal I = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (div E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 intVal I = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 / I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 / I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 / I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 intVal I = intVal I3 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 / I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 / I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 intVal I = intVal I3 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I4 / I2 = I
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 / I5 = I
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 / I5 = I
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I = intVal I3 /\ O_T = O_T
 < apply divide_integer_unique to Ev3 EvT2.

Subgoal 9.1.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I3) EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 *
Ev3 : I4 / I5 = I3
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 intVal I3 = intVal I3 /\ O_T = O_T
 < search.

Subgoal 9.1.6:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names true T
Ev : evalExpr FE EE' true trueVal EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 trueVal = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.1.6:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' true trueVal EE' [] @
EvT : evalExpr FE_T EE_T true V_T EE_T' O_T
============================
 trueVal = V_T /\ [] = O_T
 < case EvT.

Subgoal 9.1.6:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' true trueVal EE' [] @
============================
 trueVal = trueVal /\ [] = []
 < search.

Subgoal 9.1.7:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names false T
Ev : evalExpr FE EE' false falseVal EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 falseVal = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.1.7:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' false falseVal EE' [] @
EvT : evalExpr FE_T EE_T false V_T EE_T' O_T
============================
 falseVal = V_T /\ [] = O_T
 < case EvT.

Subgoal 9.1.7:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' false falseVal EE' [] @
============================
 falseVal = falseVal /\ [] = []
 < search.

Subgoal 9.1.8:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 trueVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.8:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.8:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 trueVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O_T @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O_T = O_T
 < search.

Subgoal 9.1.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.9:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 falseVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.9:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.9:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 falseVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.9.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.9.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.9.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O_T @
Ev1 : evalExpr FE EE E1 falseVal EE' O_T *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 falseVal = falseVal /\ O_T = O_T
 < search.

Subgoal 9.1.9.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.10:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 falseVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.10:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.10:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 falseVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.10.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O_T @
Ev1 : evalExpr FE EE E1 trueVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O_T = O_T
 < search.

Subgoal 9.1.11:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 trueVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.11:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.11:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 trueVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.11.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.11.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O_T @
Ev1 : evalExpr FE EE E1 trueVal EE' O_T *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 trueVal = trueVal /\ O_T = O_T
 < search.

Subgoal 9.1.11.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.11.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.12:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 trueVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.12:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.12:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 trueVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.12.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O_T @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O_T = O_T
 < search.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.13:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 falseVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.13:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.13:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 falseVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.13.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O_T @
Ev1 : evalExpr FE EE E1 falseVal EE3 O1 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O_T = O_T
 < search.

Subgoal 9.1.14:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 trueVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.14:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 trueVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.14:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 trueVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.14.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.14.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O_T @
Ev1 : evalExpr FE EE E1 falseVal EE' O_T *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T
============================
 trueVal = trueVal /\ O_T = O_T
 < search.

Subgoal 9.1.14.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.15:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 falseVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.15:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 falseVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.15:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 falseVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.15.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.15.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.15.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O_T @
Ev1 : evalExpr FE EE E1 trueVal EE' O_T *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T
============================
 falseVal = falseVal /\ O_T = O_T
 < search.

Subgoal 9.1.16:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 trueVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.16:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.16:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 trueVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 > I4
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 > I4
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O_T = O_T
 < search.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 > I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 > I4
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = falseVal /\ O = O_T
 < L: case Ev3.

Subgoal 9.1.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
L : I4 < I3
============================
 trueVal = falseVal /\ O = O_T
 < apply less_lesseq_flip_false to L EvT2.

Subgoal 9.1.17:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 falseVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.17:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.17:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 falseVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 <= I4
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = trueVal /\ O = O_T
 < L: case EvT2.

Subgoal 9.1.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 <= I4
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
L : I4 < I3
============================
 falseVal = trueVal /\ O = O_T
 < apply less_lesseq_flip_false to L Ev3.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I3 <= I2
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 <= I4
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O_T @
Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 *
Ev3 : I3 <= I4
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O_T = O_T
 < search.

Subgoal 9.1.18:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 trueVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.18:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 trueVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.18:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 trueVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O_T @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = trueVal /\ O_T = O_T
 < search.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 trueVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 trueVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V2 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V3 EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V3 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 trueVal = falseVal /\ O = O_T
 < apply EvT2 to _.

Subgoal 9.1.19:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 falseVal = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.19:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 falseVal = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.19:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 falseVal = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = trueVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = trueVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = trueVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V3 EE' O4 *
Ev3 : V3 = V3 -> false
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = trueVal /\ O = O_T
 < apply Ev3 to _.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 falseVal = falseVal /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 falseVal = falseVal /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V3 = V2 -> false
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V4 EE' O4 *
Ev3 : V3 = V4 -> false
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O_T @
Ev1 : evalExpr FE EE E1 V3 EE3 O1 *
Ev2 : evalExpr FE EE3 E2 V4 EE' O4 *
Ev3 : V3 = V4 -> false
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 falseVal = falseVal /\ O_T = O_T
 < search.

Subgoal 9.1.20:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (stringLit S) T
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 stringVal S = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.1.20:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
EvT : evalExpr FE_T EE_T (stringLit S) V_T EE_T' O_T
============================
 stringVal S = V_T /\ [] = O_T
 < case EvT.

Subgoal 9.1.20:

Variables: Names FE FE_T EE' EE_T' S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
============================
 stringVal S = stringVal S /\ [] = []
 < search.

Subgoal 9.1.21:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (appString E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 stringVal S = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.21:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 stringVal S = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
EvT : evalExpr FE_T EE_T (appString E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 stringVal S = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S4 ++ S2 = S
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S4 ++ S2 = S
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S4 ++ S2 = S
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S4 ++ S2 = S
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S4 ++ S2 = S
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S4 ++ S2 = S
Ev4 : O1 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S5) EE' O4 *
Ev3 : S4 ++ S5 = S
Ev4 : O1 ++ O4 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 stringVal S = stringVal S3 /\ O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O_T @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S5) EE' O4 *
Ev3 : S4 ++ S5 = S
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 stringVal S = stringVal S3 /\ O_T = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S3) EE' O_T @
Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 *
Ev2 : evalExpr FE EE3 E2 (stringVal S5) EE' O4 *
Ev3 : S4 ++ S5 = S3
Ev4 : O1 ++ O4 = O_T
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 stringVal S3 = stringVal S3 /\ O_T = O_T
 < search.

Subgoal 9.1.22:

Variables: T Names EE_T FE FE_T V V_T EE' EE_T' O_T X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (name X)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (name X) T
Ev : evalExpr FE EE' (name X) V EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookupScopes X EE' V
============================
 V = V_T /\ [] = O_T
 < case IsE.

Subgoal 9.1.22:

Variables: T Names EE_T FE FE_T V V_T EE' EE_T' O_T X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (name X) T
Ev : evalExpr FE EE' (name X) V EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookupScopes X EE' V
H1 : is_string X
============================
 V = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.1.22:

Variables: Names EE_T FE FE_T V V_T EE' EE_T' O_T X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V EE' [] @
EvT : evalExpr FE_T EE_T (name X) V_T EE_T' O_T
Ev1 : lookupScopes X EE' V
H1 : is_string X
============================
 V = V_T /\ [] = O_T
 < EvT: case EvT.

Subgoal 9.1.22:

Variables: Names FE FE_T V V_T EE' EE_T' X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
H1 : is_string X
EvT : lookupScopes X EE_T' V_T
============================
 V = V_T /\ [] = []
 < apply scopes_same_lookupScopes to _ _ SS Ev1 EvT.

Subgoal 9.1.22:

Variables: Names FE FE_T V_T EE' EE_T' X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V_T EE' [] @
Ev1 : lookupScopes X EE' V_T
H1 : is_string X
EvT : lookupScopes X EE_T' V_T
============================
 V_T = V_T /\ [] = []
 < search.

Subgoal 9.1.23:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (call Fun Args)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 V = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.23:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 V = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
EvT : evalExpr FE_T EE_T (call Fun A1) V_T EE_T' O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
============================
 V = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames1 ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar1 EE1 V_T
============================
 V = V_T /\ O = O_T
 < R: case RFE (keep).

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames1 ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar1 EE1 V_T
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 V = V_T /\ O = O_T
 < L_T: apply R to Ev1.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames1 ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar1 EE1 V_T
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
L_T : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 V = V_T /\ O = O_T
 < apply lookup_unique to EvT L_T.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
L_T : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 V = V_T /\ O = O_T
 < clear L_T
   R
   R1.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 V = V_T /\ O = O_T
 < apply IH_A to _ _ _ _ _ _ _ _ _ Trans Ev2 EvT1.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body InitEnv EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 V = V_T /\ O = O_T
 < apply zip_unique to Ev3 EvT2.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 V = V_T /\ O = O_T
 < apply evalArgs_isValue to _ _ _ Ev2.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
============================
 V = V_T /\ O = O_T
 < IsP: apply lookup_is_value_funCtx to _ Ev1.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 V = V_T /\ O = O_T
 < IsP: case IsP.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 V = V_T /\ O = O_T
 < IsP: case IsP1.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 V = V_T /\ O = O_T
 < IsP: case IsP2.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
============================
 V = V_T /\ O = O_T
 < apply zip_is to _ _ Ev3.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
============================
 V = V_T /\ O = O_T
 < Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1).

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
============================
 V = V_T /\ O = O_T
 < apply zip_ctx_names to Z.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 *
Ev5 : O1 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
============================
 V = V_T /\ O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
============================
 V = V_T /\ O = O_T
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
SS' : scopes_same EE3 EE1
============================
 V = V_T /\ O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
SS' : scopes_same EE3 EE1
============================
 V = V_T /\ O_T = O_T
 < apply evalStmt_isCtx to _ _ _ Ev4.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
SS' : scopes_same EE3 EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 V = V_T /\ O_T = O_T
 < apply transS_is to _ _ L_T1.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
SS' : scopes_same EE3 EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_stmt Body_T
============================
 V = V_T /\ O_T = O_T
 < apply evalStmt_isCtx to _ _ _ EvT3.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
SS' : scopes_same EE3 EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_stmt Body_T
H8 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 V = V_T /\ O_T = O_T
 < apply scopes_same_lookupScopes to _ _ _ Ev6 EvT5.

Subgoal 9.1.23:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V_T EE' O_T @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 *
Ev3 : zip ArgNames ArgVals1 InitEnv1
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 *
Ev5 : O1 ++ O4 = O_T
Ev6 : lookupScopes RetVar EE3 V_T
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar EE1 V_T
L_T1 : transS [RetVar::ArgNames] Body Body_T Names1
H3 : is_list is_value ArgVals1
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
H4 : is_list (is_pair is_string is_value) InitEnv1
Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1)
H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames]
SS' : scopes_same EE3 EE1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_stmt Body_T
H8 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 V_T = V_T /\ O_T = O_T
 < search.

Subgoal 9.1.24:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stmtExpr S 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 V = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.24:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 V = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
EvT : evalExpr FE_T EE_T (stmtExpr S2 E3) V_T EE_T' O_T
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
============================
 V = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 V = V_T /\ O = O_T
 < apply ctx_names_add_scope to Ctxs.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
============================
 V = V_T /\ O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
============================
 V = V_T /\ O = O_T
 < apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
============================
 V = V_T /\ O = O_T
 < apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
============================
 V = V_T /\ O = O_T
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 V = V_T /\ O = O_T
 < apply transS_isNames to _ _ Trans.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list is_string) Names2
============================
 V = V_T /\ O = O_T
 < apply transS_is to _ _ Trans.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list is_string) Names2
H8 : is_stmt S2
============================
 V = V_T /\ O = O_T
 < apply evalStmt_isCtx to _ _ _ EvT.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list is_string) Names2
H8 : is_stmt S2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 V = V_T /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 Scope E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V_T EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V_T (Scope::EE') O4 *
Ev3 : O1 ++ O4 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list is_string) Names2
H8 : is_stmt S2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 V_T = V_T /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.1.24:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O_T EE3 Scope E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V_T EE' O_T @
Ev1 : evalStmt FE ([]::EE) S EE3 O1 *
Ev2 : evalExpr FE EE3 E1 V_T (Scope::EE') O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : ctx_names EE3 Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list is_string) Names2
H8 : is_stmt S2
H9 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 V_T = V_T /\ O_T = O_T
 < search.

Subgoal 9.1.25:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (recBuild RF)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 recVal VF = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.25:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 recVal VF = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.25:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF RF2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
EvT : evalExpr FE_T EE_T (recBuild RF2) V_T EE_T' O_T
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
============================
 recVal VF = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.25:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T VF RF RF2 VF1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T
============================
 recVal VF = recVal VF1 /\ O = O_T
 < apply IH_RF to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.25:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T RF RF2 VF1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF1) EE' O_T @
Ev1 : evalRecFields FE EE RF VF1 EE' O_T *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T
============================
 recVal VF1 = recVal VF1 /\ O_T = O_T
 < search.

Subgoal 9.1.26:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (recFieldAccess Rec F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 V = V_T /\ O = O_T
 < case IsE.

Subgoal 9.1.26:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 V = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.26:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
EvT : evalExpr FE_T EE_T (recFieldAccess E2 F) V_T EE_T' O_T
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
============================
 V = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.1.26:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 Fields1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T
EvT1 : lookup Fields1 F V_T
============================
 V = V_T /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.1.26:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T F Rec E2 Fields1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O_T @
Ev1 : evalExpr FE EE Rec (recVal Fields1) EE' O_T *
Ev2 : lookup Fields1 F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T
EvT1 : lookup Fields1 F V_T
============================
 V = V_T /\ O_T = O_T
 < apply lookup_unique to Ev2 EvT1.

Subgoal 9.1.26:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O_T F Rec E2 Fields1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V_T EE' O_T @
Ev1 : evalExpr FE EE Rec (recVal Fields1) EE' O_T *
Ev2 : lookup Fields1 F V_T
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T
EvT1 : lookup Fields1 F V_T
============================
 V_T = V_T /\ O_T = O_T
 < search.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 V = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
============================
 V = V_T /\ O = O_T
 < apply names_is to _ Ev1.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
H1 : is_list is_string Names1
============================
 V = V_T /\ O = O_T
 < apply proj_expr_is to Ev2 _ _.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
H1 : is_list is_string Names1
H2 : is_expr E_P
============================
 V = V_T /\ O = O_T
 < apply proj_expr_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
============================
 V = V_T /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P EE_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_T EE_P O_T *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
============================
 V = V_T /\ O = O_T
 < Ev': apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P EE_P N EE''
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_T EE_P O_T *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
Ev' : evalExpr FE EE E_P V EE'' O
Ev'1 : scopes_same EE' EE''
============================
 V = V_T /\ O = O_T
 < apply evalExpr_unique to _ _ _ Ev' Ev3.

Subgoal 9.1.27:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O_T Names1 E_P EE_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_T EE' O_T @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_T EE_P O_T *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
Ev' : evalExpr FE EE E_P V_T EE_P O_T
Ev'1 : scopes_same EE' EE_P
============================
 V_T = V_T /\ O_T = O_T
 < search.

Subgoal 9.2.1:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T I
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (num I) T
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.2.1:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T I
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
EvT : evalExpr FE_T EE_T (num I) V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.2.1:

Variables: Names FE FE_T EE' EE_T' I
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (plus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (plus E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 + I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.3:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (minus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.3:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (minus E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 - I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.4:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (mult E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.4:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (mult E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.4:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 * I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.5:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (div E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.5:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
EvT : evalExpr FE_T EE_T (div E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.5:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4
EvT2 : I4 / I5 = I3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.6:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names true T
Ev : evalExpr FE EE' true trueVal EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.2.6:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' true trueVal EE' [] @
EvT : evalExpr FE_T EE_T true V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.2.6:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' true trueVal EE' [] @
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.7:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names false T
Ev : evalExpr FE EE' false falseVal EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.2.7:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' false falseVal EE' [] @
EvT : evalExpr FE_T EE_T false V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.2.7:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' false falseVal EE' [] @
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.8:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.8:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.8:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.8.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.8.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.9:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.9:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.9:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.9.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.9.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.9.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.9.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.10:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.10:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.10:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.10.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.10.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.10.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.11:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.11:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.11:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.11.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.11.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.11.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.11.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2
EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3
EvT2 : O2 ++ O3 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.12:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.12:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.12:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.12.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.12.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.12.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.13:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.13:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.13:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.13.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.13.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.13.3:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1
EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.14:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.14:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.14:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.14.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.14.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.14.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.15:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.15:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.15:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.15.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.15.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.15.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.16:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.16:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.16:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.16.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.16.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.17:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.17:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.17:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.17.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 > I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.17.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4
EvT2 : I3 <= I4
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.18:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.18:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.18:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.18.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.18.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V2 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : V2 = V3 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.19:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.19:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.19:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.19.1:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.19.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 V3 EE1 O1
EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4
EvT2 : V3 = V4 -> false
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.20:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (stringLit S) T
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.2.20:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
EvT : evalExpr FE_T EE_T (stringLit S) V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.2.20:

Variables: Names FE FE_T EE' EE_T' S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.21:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (appString E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.21:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
EvT : evalExpr FE_T EE_T (appString E11 E21) V_T EE_T' O_T
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.21:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1
EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4
EvT2 : S4 ++ S5 = S3
EvT3 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.22:

Variables: T Names EE_T FE FE_T V V_T EE' EE_T' O_T X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (name X)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (name X) T
Ev : evalExpr FE EE' (name X) V EE' [] @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookupScopes X EE' V
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.2.22:

Variables: Names EE_T FE FE_T V V_T EE' EE_T' O_T X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (name X)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V EE' [] @
EvT : evalExpr FE_T EE_T (name X) V_T EE_T' O_T
Ev1 : lookupScopes X EE' V
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.2.22:

Variables: Names FE FE_T V V_T EE' EE_T' X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (name X)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
H1 : lookupScopes X EE_T' V_T
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.23:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (call Fun Args)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.23:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
EvT : evalExpr FE_T EE_T (call Fun A1) V_T EE_T' O_T
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames1 ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar1 EE1 V_T
============================
 scopes_same EE' EE_T'
 < apply IH_A_C to _ _ _ _ _ _ _ _ _ Trans Ev2 EvT1.

Subgoal 9.2.23:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1)))
EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1
EvT2 : zip ArgNames1 ArgVals1 InitEnv1
EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4
EvT4 : O1 ++ O4 = O_T
EvT5 : lookupScopes RetVar1 EE1 V_T
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.24:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (stmtExpr S 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.24:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
EvT : evalExpr FE_T EE_T (stmtExpr S2 E3) V_T EE_T' O_T
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
============================
 scopes_same EE' EE_T'
 < apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transS_is to _ _ Trans.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_stmt S2
============================
 scopes_same EE' EE_T'
 < apply evalStmt_isCtx to _ _ _ EvT.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_stmt S2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_stmt S2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names2
============================
 scopes_same EE' EE_T'
 < apply transS_isNames to _ _ Trans.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_stmt S2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names2
H9 : is_list (is_list is_string) Names2
============================
 scopes_same EE' EE_T'
 < SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_stmt S2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names2
H9 : is_list (is_list is_string) Names2
SS' : scopes_same (Scope::EE') (Scope1::EE_T')
============================
 scopes_same EE' EE_T'
 < case SS'.

Subgoal 9.2.24:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1
EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H3 : ctx_names ([]::EE) ([]::Names)
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_stmt S2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names2
H9 : is_list (is_list is_string) Names2
H10 : forall X V, lookup Scope X V -> lookup Scope1 X V
H11 : forall X V, lookup Scope1 X V -> lookup Scope X V
H12 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.25:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (recBuild RF)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.25:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.25:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF RF2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
EvT : evalExpr FE_T EE_T (recBuild RF2) V_T EE_T' O_T
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.25:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T VF RF RF2 VF1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_RF_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.25:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T VF RF RF2 VF1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.26:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr (recFieldAccess Rec F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 scopes_same EE' EE_T'
 < case IsE.

Subgoal 9.2.26:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.26:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
EvT : evalExpr FE_T EE_T (recFieldAccess E2 F) V_T EE_T' O_T
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.2.26:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 Fields1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T
EvT1 : lookup Fields1 F V_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.2.26:

Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 Fields1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T
EvT1 : lookup Fields1 F V_T
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
============================
 scopes_same EE' EE_T'
 < apply names_is to _ Ev1.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
H1 : is_list is_string Names1
============================
 scopes_same EE' EE_T'
 < apply proj_expr_is to Ev2 _ _.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
H1 : is_list is_string Names1
H2 : is_expr E_P
============================
 scopes_same EE' EE_T'
 < apply proj_expr_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
============================
 scopes_same EE' EE_T'
 < SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
SS' : scopes_same EE_P EE_T'
============================
 scopes_same EE' EE_T'
 < Ev': apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N EE''
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
SS' : scopes_same EE_P EE_T'
Ev' : evalExpr FE EE E_P V EE'' O
Ev'1 : scopes_same EE' EE''
============================
 scopes_same EE' EE_T'
 < apply evalExpr_unique to _ _ _ Ev' Ev3.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O_T Names1 E_P V_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
SS' : scopes_same EE_P EE_T'
Ev' : evalExpr FE EE E_P V_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
============================
 scopes_same EE' EE_T'
 < apply scopes_same_trans to Ev'1 SS'.

Subgoal 9.2.27:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O_T Names1 E_P V_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
EvT : evalExpr FE_T EE_T T V_T EE_T' O_T
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H1 : is_list is_string Names1
H2 : is_expr E_P
SS' : scopes_same EE_P EE_T'
Ev' : evalExpr FE EE E_P V_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.3.1:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names noop T Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
EvT : evalStmt FE_T EE_T T EE_T' O_T
============================
 [] = O_T
 < case Trans.

Subgoal 9.3.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
EvT : evalStmt FE_T EE_T noop EE_T' O_T
============================
 [] = O_T
 < case EvT.

Subgoal 9.3.1:

Variables: Names' Scope EE FE FE_T EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 [] = []
 < search.

Subgoal 9.3.2:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (seq S1 S2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.2:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
EvT : evalStmt FE_T EE_T (seq S11 S21) EE_T' O_T
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
============================
 O = O_T
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = O_T
 < apply transS_is to _ _ Trans.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
============================
 O = O_T
 < apply transS_isNames to _ _ Trans.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
============================
 O = O_T
 < apply evalStmt_isCtx to _ _ _ EvT.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O = O_T
 < C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.3.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names3
============================
 O = O_T
 < case Ctxs.

Subgoal 9.3.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 BRest B
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names3
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 O = O_T
 < apply transS_old_scopes to _ _ Trans.

Subgoal 9.3.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 O = O_T
 < case C (keep).

Subgoal 9.3.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.3.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
============================
 O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.3.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O_T @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
============================
 O_T = O_T
 < search.

Subgoal 9.3.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (declare Ty X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 O = O_T
 < case IsS.

Subgoal 9.3.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.3:

Variables: Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.3:

Variables: Scope EE EE_T FE FE_T O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.3:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
============================
 O_T = O_T
 < search.

Subgoal 9.3.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (assign X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
============================
 O = O_T
 < case IsS.

Subgoal 9.3.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
EvT : evalStmt FE_T EE_T (assign X E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
============================
 O_T = O_T
 < search.

Subgoal 9.3.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (recUpdate Rec Fields 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
============================
 O = O_T
 < case IsS.

Subgoal 9.3.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
EvT : evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V1 FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
============================
 O_T = O_T
 < search.

Subgoal 9.3.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.6:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
============================
 O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
============================
 O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O = O_T
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
============================
 O = O_T
 < apply ctx_names_add_scope to C.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 O = O_T
 < SS': apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.3.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 O_T = O_T
 < search.

Subgoal 9.3.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.7:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
============================
 O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
============================
 O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O = O_T
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
============================
 O = O_T
 < apply ctx_names_add_scope to C.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 O = O_T
 < SS': apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.3.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 O_T = O_T
 < search.

Subgoal 9.3.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 O = O_T
 < Trans: case Trans (keep).

Subgoal 9.3.8:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
============================
 O = O_T
 < SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
============================
 O = O_T
 < apply transE_is to _ _ Trans1.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
============================
 O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 O = O_T
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 Ev1.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
============================
 O = O_T
 < apply ctx_names_add_scope to C.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
============================
 O = O_T
 < SS'': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
SS'' : scopes_same (Scope1::EE4) (Scope2::EE3)
============================
 O = O_T
 < case SS''.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
============================
 O = O_T
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 O = O_T
 < case IsEE4+.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 O = O_T
 < apply transS_is to _ _ Trans2.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
============================
 O = O_T
 < IsEE3+: apply evalStmt_isCtx to _ _ _ EvT1.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE3)
============================
 O = O_T
 < case IsEE3+.

Subgoal 9.3.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 O = O_T
 < case Ctxs (keep).

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 (B::BRest)
H6 : ctx_names ([]::EE2) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
============================
 O = O_T
 < case C (keep).

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
============================
 O = O_T
 < case SS' (keep).

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
============================
 O = O_T
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
============================
 O = O_T
 < C'': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev2.

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : ctx_names (Scope1::EE4) (Scope'::(B::BRest))
============================
 O = O_T
 < C'': case C''.

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 (B::BRest)
============================
 O = O_T
 < case C''2 (keep).

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same (A1::ARest1) EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A1::ARest1) (B::BRest)
H24 : forall K I, mem (K, I) A1 -> mem K B
H25 : forall K, mem K B -> exists I, mem (K, I) A1
H26 : ctx_names ARest1 BRest
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev3 EvT2.

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O6 *
Ev4 : O1 ++ O5 = O12
Ev5 : O12 ++ O6 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same (A1::ARest1) EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A1::ARest1) (B::BRest)
H24 : forall K I, mem (K, I) A1 -> mem K B
H25 : forall K, mem K B -> exists I, mem (K, I) A1
H26 : ctx_names ARest1 BRest
============================
 O = O_T
 < apply append_unique to Ev4 EvT3.

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O6 *
Ev4 : O1 ++ O5 = O7
Ev5 : O7 ++ O6 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same (A1::ARest1) EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A1::ARest1) (B::BRest)
H24 : forall K I, mem (K, I) A1 -> mem K B
H25 : forall K, mem K B -> exists I, mem (K, I) A1
H26 : ctx_names ARest1 BRest
============================
 O = O_T
 < apply append_unique to Ev5 EvT4.

Subgoal 9.3.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O_T Scope1 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O6 *
Ev4 : O1 ++ O5 = O7
Ev5 : O7 ++ O6 = O_T
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same (A1::ARest1) EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A1::ARest1) (B::BRest)
H24 : forall K I, mem (K, I) A1 -> mem K B
H25 : forall K, mem K B -> exists I, mem (K, I) A1
H26 : ctx_names ARest1 BRest
============================
 O_T = O_T
 < search.

Subgoal 9.3.8.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 9.3.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
============================
 O = O_T
 < case IsS.

Subgoal 9.3.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.9:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 EE2 O2 Scope1 EE4 O3 O4 O12
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE2 O2
EvT1 : evalStmt FE_T ([]::EE2) Body2 (Scope1::EE4) O3
EvT2 : evalStmt FE_T EE4 (while Cond2 Body2) EE_T' O4
EvT3 : O2 ++ O3 = O12
EvT4 : O12 ++ O4 = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.9.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.9.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O_T *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T
============================
 O_T = O_T
 < search.

Subgoal 9.3.10:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (scopeStmt S1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
============================
 O = O_T
 < case IsS.

Subgoal 9.3.10:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
EvT : evalStmt FE_T EE_T (scopeStmt S3) EE_T' O_T
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
============================
 O = O_T
 < apply ctx_names_add_scope to Ctxs.

Subgoal 9.3.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O_T @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O_T *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 O_T = O_T
 < search.

Subgoal 9.3.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.11:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.11.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 I1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1
EvT1 : O1 ++ [intVal I1] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.11.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 I1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I1) EE' O1 *
Ev2 : O1 ++ [intVal I1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1
EvT1 : O1 ++ [intVal I1] = O_T
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 9.3.11.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 I1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E (intVal I1) EE' O1 *
Ev2 : O1 ++ [intVal I1] = O_T
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1
EvT1 : O1 ++ [intVal I1] = O_T
============================
 O_T = O_T
 < search.

Subgoal 9.3.11.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.11.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.11.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 S1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.12:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.12.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.12.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.12.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O1 *
Ev2 : O1 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 9.3.12.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O1 *
Ev2 : O1 ++ [trueVal] = O_T
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O_T = O_T
 < search.

Subgoal 9.3.12.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.12.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.13:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.13.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.13.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.13.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.13.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O1 *
Ev2 : O1 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 9.3.13.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O1 *
Ev2 : O1 ++ [falseVal] = O_T
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O_T = O_T
 < search.

Subgoal 9.3.13.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 O = O_T
 < case IsS.

Subgoal 9.3.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.14:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 O = O_T
 < EvT: case EvT.

Subgoal 9.3.14.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 I O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.14.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.14.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.14.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 S2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1
EvT1 : O1 ++ [stringVal S2] = O_T
============================
 O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.3.14.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 S2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) EE' O1 *
Ev2 : O1 ++ [stringVal S2] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1
EvT1 : O1 ++ [stringVal S2] = O_T
============================
 O = O_T
 < apply append_unique to Ev2 EvT1.

Subgoal 9.3.14.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 S2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) EE' O1 *
Ev2 : O1 ++ [stringVal S2] = O_T
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1
EvT1 : O1 ++ [stringVal S2] = O_T
============================
 O_T = O_T
 < search.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown K evalStmt> T Names'
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 O = O_T
 < Trans: case Trans.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
============================
 O = O_T
 < apply names_is to _ Ev1.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
H1 : is_list is_string Names1
============================
 O = O_T
 < apply proj_stmt_is to Ev2 _ _.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 O = O_T
 < apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 O = O_T
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 O = O_T
 < Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P N EE''
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
Ev' : evalStmt FE (Scope::EE) S_P EE'' O
Ev'1 : scopes_same EE' EE''
============================
 O = O_T
 < apply evalStmt_unique to _ _ _ Ev' Ev3.

Subgoal 9.3.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_T @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
Ev' : evalStmt FE (Scope::EE) S_P EE_P O_T
Ev'1 : scopes_same EE' EE_P
============================
 O_T = O_T
 < search.

Subgoal 9.4.1:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names noop T Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
EvT : evalStmt FE_T EE_T T EE_T' O_T
============================
 scopes_same (Scope::EE) EE_T'
 < case Trans.

Subgoal 9.4.1:

Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
EvT : evalStmt FE_T EE_T noop EE_T' O_T
============================
 scopes_same (Scope::EE) EE_T'
 < case EvT.

Subgoal 9.4.1:

Variables: Names' Scope EE FE FE_T EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 scopes_same (Scope::EE) EE_T'
 < search.

Subgoal 9.4.2:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (seq S1 S2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.2:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
EvT : evalStmt FE_T EE_T (seq S11 S21) EE_T' O_T
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transS_is to _ _ Trans.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
============================
 scopes_same EE' EE_T'
 < apply transS_isNames to _ _ Trans.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
============================
 scopes_same EE' EE_T'
 < apply evalStmt_isCtx to _ _ _ EvT.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.4.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names3
============================
 scopes_same EE' EE_T'
 < case Ctxs.

Subgoal 9.4.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 BRest B
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) Names3
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names3
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 scopes_same EE' EE_T'
 < apply transS_old_scopes to _ _ Trans.

Subgoal 9.4.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same EE3 EE1
H3 : is_list (is_list (is_pair is_string is_value)) EE3
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 scopes_same EE' EE_T'
 < case C (keep).

Subgoal 9.4.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
============================
 scopes_same EE' EE_T'
 < apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.4.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvT : evalStmt FE_T EE_T S11 EE1 O1
EvT1 : evalStmt FE_T EE1 S21 EE_T' O4
EvT2 : O1 ++ O4 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list is_string) (Scope'::BRest)
H6 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (declare Ty X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 scopes_same (((X, V)::Scope1)::EE2) EE_T'
 < case IsS.

Subgoal 9.4.3:

Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 scopes_same (((X, V)::Scope1)::EE2) EE_T'
 < Trans: case Trans.

Subgoal 9.4.3:

Variables: Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
============================
 scopes_same (((X, V)::Scope1)::EE2) EE_T'
 < EvT: case EvT.

Subgoal 9.4.3:

Variables: Scope EE EE_T FE FE_T O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
============================
 scopes_same (((X, V)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.3:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
============================
 scopes_same (((X, V1)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
 < SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.3:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : scopes_same (Scope1::EE2) (Scope3::EE3)
============================
 scopes_same (((X, V1)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
 < SS': case SS'.

Subgoal 9.4.3:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
============================
 scopes_same (((X, V1)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
 < unfold .

Subgoal 9.4.3.1:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
============================
 forall X1 V, lookup ((X, V1)::Scope1) X1 V -> lookup ((X, V1)::Scope3) X1 V
 < intros L.

Subgoal 9.4.3.1:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
L : lookup ((X, V1)::Scope1) X1 V2
============================
 lookup ((X, V1)::Scope3) X1 V2
 < L: case L.

Subgoal 9.4.3.1.1:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 E Ty Names1 Scope2 E2 EE3 Scope3 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V2)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V2 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V2 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
============================
 lookup ((X1, V2)::Scope3) X1 V2
 < search.

Subgoal 9.4.3.1.2:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
L : X = X1 -> false
L1 : lookup Scope1 X1 V2
============================
 lookup ((X, V1)::Scope3) X1 V2
 < apply SS' to L1.

Subgoal 9.4.3.1.2:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
L : X = X1 -> false
L1 : lookup Scope1 X1 V2
H4 : lookup Scope3 X1 V2
============================
 lookup ((X, V1)::Scope3) X1 V2
 < search.

Subgoal 9.4.3.2:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
============================
 forall X1 V, lookup ((X, V1)::Scope3) X1 V -> lookup ((X, V1)::Scope1) X1 V
 < intros L.

Subgoal 9.4.3.2:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
L : lookup ((X, V1)::Scope3) X1 V2
============================
 lookup ((X, V1)::Scope1) X1 V2
 < L: case L.

Subgoal 9.4.3.2.1:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 E Ty Names1 Scope2 E2 EE3 Scope3 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V2)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V2 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X1
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V2 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
============================
 lookup ((X1, V2)::Scope1) X1 V2
 < search.

Subgoal 9.4.3.2.2:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
L : X = X1 -> false
L1 : lookup Scope3 X1 V2
============================
 lookup ((X, V1)::Scope1) X1 V2
 < apply SS'1 to L1.

Subgoal 9.4.3.2.2:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
L : X = X1 -> false
L1 : lookup Scope3 X1 V2
H4 : lookup Scope1 X1 V2
============================
 lookup ((X, V1)::Scope1) X1 V2
 < search.

Subgoal 9.4.3.3:

Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T
SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V
SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V
SS'2 : scopes_same EE2 EE3
============================
 scopes_same EE2 EE3
 < search.

Subgoal 9.4.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (assign X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
EvT : evalStmt FE_T EE_T (assign X E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply scopes_same_replaceScopes_scopes_same to _ _ _ _ Ev2 EvT1.

Subgoal 9.4.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : replaceScopes X V1 EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : replaceScopes X V1 EE1 EE_T'
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (recUpdate Rec Fields 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
EvT : evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V1 FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V1 FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V1 FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V1 FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V1 FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply scopes_same_lookupScopes to _ _ _ Ev2 EvT1.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals1)
Ev3 : updateRecFields Fields V1 FieldVals1 NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply updateRecFields_unique to Ev3 EvT2.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals1)
Ev3 : updateRecFields Fields V1 FieldVals1 NewVals1
Ev4 : replaceScopes Rec (recVal NewVals1) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply scopes_same_replaceScopes_scopes_same to _ _ _ _ Ev4 EvT3.

Subgoal 9.4.5:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E Fields Rec E2 V1 EE1 FieldVals1 NewVals1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @
Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals1)
Ev3 : updateRecFields Fields V1 FieldVals1 NewVals1
Ev4 : replaceScopes Rec (recVal NewVals1) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T
EvT1 : lookupScopes Rec EE_T (recVal FieldVals1)
EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1
EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T'
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.6:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
============================
 scopes_same EE' EE_T'
 < apply ctx_names_add_scope to C.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 scopes_same EE' EE_T'
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
SS' : scopes_same (Scope1::EE') (Scope2::EE_T')
============================
 scopes_same EE' EE_T'
 < case SS'.

Subgoal 9.4.6.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
H9 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H10 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H11 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.6.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.7:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.7.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
============================
 scopes_same EE' EE_T'
 < apply ctx_names_add_scope to C.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
============================
 scopes_same EE' EE_T'
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
SS' : scopes_same (Scope1::EE') (Scope2::EE_T')
============================
 scopes_same EE' EE_T'
 < case SS'.

Subgoal 9.4.7.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_expr Cond2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE3 Names'
H8 : ctx_names ([]::EE3) ([]::Names')
H9 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H10 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H11 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 scopes_same EE' EE_T'
 < Trans: case Trans (keep).

Subgoal 9.4.8:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
============================
 scopes_same EE' EE_T'
 < SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans1.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 Ev1.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
============================
 scopes_same EE' EE_T'
 < apply ctx_names_add_scope to C.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
============================
 scopes_same EE' EE_T'
 < apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
============================
 scopes_same EE' EE_T'
 < SS'': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
SS'' : scopes_same (Scope1::EE4) (Scope2::EE3)
============================
 scopes_same EE' EE_T'
 < case SS''.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
============================
 scopes_same EE' EE_T'
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 scopes_same EE' EE_T'
 < case IsEE4+.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 scopes_same EE' EE_T'
 < apply transS_is to _ _ Trans2.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
============================
 scopes_same EE' EE_T'
 < IsEE3+: apply evalStmt_isCtx to _ _ _ EvT1.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE3)
============================
 scopes_same EE' EE_T'
 < case IsEE3+.

Subgoal 9.4.8.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < case Ctxs (keep).

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same EE2 EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names EE2 (B::BRest)
H6 : ctx_names ([]::EE2) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
============================
 scopes_same EE' EE_T'
 < case C (keep).

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1
EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) EE1
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE1
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
============================
 scopes_same EE' EE_T'
 < case SS' (keep).

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
============================
 scopes_same EE' EE_T'
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
============================
 scopes_same EE' EE_T'
 < C'': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev2.

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : ctx_names (Scope1::EE4) (Scope'::(B::BRest))
============================
 scopes_same EE' EE_T'
 < C'': case C''.

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same EE4 EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) EE4
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names EE4 (B::BRest)
============================
 scopes_same EE' EE_T'
 < case C''2 (keep).

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same (A1::ARest1) EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A1::ARest1) (B::BRest)
H24 : forall K I, mem (K, I) A1 -> mem K B
H25 : forall K, mem K B -> exists I, mem (K, I) A1
H26 : ctx_names ARest1 BRest
============================
 scopes_same EE' EE_T'
 < apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev3 EvT2.

Subgoal 9.4.8.1:

Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O5 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B::BRest) Cond Cond2
Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest))
EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1
EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5
EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6
EvT3 : O1 ++ O5 = O7
EvT4 : O7 ++ O6 = O_T
SS' : scopes_same (A::ARest) (B1::BRest1)
H3 : is_expr Cond2
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
C : ctx_names (A::ARest) (B::BRest)
H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest))
H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H9 : scopes_same (A1::ARest1) EE3
H10 : is_list (is_pair is_string is_value) Scope1
H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H12 : is_stmt Body2
H13 : is_list (is_pair is_string is_value) Scope2
H14 : is_list (is_list (is_pair is_string is_value)) EE3
H15 : forall K I, mem (K, I) Scope -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) Scope
H17 : ctx_names EE BRest
H18 : forall K I, mem (K, I) A -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A
H20 : ctx_names ARest BRest
H21 : forall X V, lookup A X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A X V
H23 : scopes_same ARest BRest1
C'' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C''2 : ctx_names (A1::ARest1) (B::BRest)
H24 : forall K I, mem (K, I) A1 -> mem K B
H25 : forall K, mem K B -> exists I, mem (K, I) A1
H26 : ctx_names ARest1 BRest
H27 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.8.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT.

Subgoal 9.4.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.9:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.9.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 EE2 O2 Scope1 EE4 O3 O4 O12
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 trueVal EE2 O2
EvT1 : evalStmt FE_T ([]::EE2) Body2 (Scope1::EE4) O3
EvT2 : evalStmt FE_T EE4 (while Cond2 Body2) EE_T' O4
EvT3 : O2 ++ O3 = O12
EvT4 : O12 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.9.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.9.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.10:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (scopeStmt S1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.10:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
EvT : evalStmt FE_T EE_T (scopeStmt S3) EE_T' O_T
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
============================
 scopes_same EE' EE_T'
 < apply ctx_names_add_scope to Ctxs.

Subgoal 9.4.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 scopes_same EE' EE_T'
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
SS' : scopes_same (Scope1::EE') (Scope2::EE_T')
============================
 scopes_same EE' EE_T'
 < case SS'.

Subgoal 9.4.10:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T
H2 : ctx_names ([]::(Scope::EE)) ([]::Names')
H3 : forall X V, lookup Scope1 X V -> lookup Scope2 X V
H4 : forall X V, lookup Scope2 X V -> lookup Scope1 X V
H5 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.11:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.11.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 I1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1
EvT1 : O1 ++ [intVal I1] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.11.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 I1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1
EvT1 : O1 ++ [intVal I1] = O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.11.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.11.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.11.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 S1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.12:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.12.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.12.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.12.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.12.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.12.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.13:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.13.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.13.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.13.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.13.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.13.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1
EvT1 : O1 ++ [stringVal S1] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 scopes_same EE' EE_T'
 < case IsS.

Subgoal 9.4.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.14:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.4.14.1:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 I O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1
EvT1 : O1 ++ [intVal I] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.14.2:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1
EvT1 : O1 ++ [trueVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.14.3:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1
EvT1 : O1 ++ [falseVal] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.14.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 S2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1
EvT1 : O1 ++ [stringVal S2] = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.4.14.4:

Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 S2 O1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1
EvT1 : O1 ++ [stringVal S2] = O_T
H2 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown K evalStmt> T Names'
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
============================
 scopes_same EE' EE_T'
 < apply names_is to _ Ev1.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
H1 : is_list is_string Names1
============================
 scopes_same EE' EE_T'
 < apply proj_stmt_is to Ev2 _ _.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 scopes_same EE' EE_T'
 < apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 scopes_same EE' EE_T'
 < SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
SS' : scopes_same EE_P EE_T'
============================
 scopes_same EE' EE_T'
 < Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N EE''
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
SS' : scopes_same EE_P EE_T'
Ev' : evalStmt FE (Scope::EE) S_P EE'' O
Ev'1 : scopes_same EE' EE''
============================
 scopes_same EE' EE_T'
 < apply evalStmt_unique to _ _ _ Ev' Ev3.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
SS' : scopes_same EE_P EE_T'
Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
============================
 scopes_same EE' EE_T'
 < apply scopes_same_trans to Ev'1 SS'.

Subgoal 9.4.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
EvT : evalStmt FE_T EE_T T EE_T' O_T
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H1 : is_list is_string Names1
H2 : is_stmt S_P
SS' : scopes_same EE_P EE_T'
Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
H3 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.5.1:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transA Names nilArgs T
Ev : evalArgs FE EE' nilArgs [] EE' [] @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
============================
 [] = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.5.1:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalArgs FE EE' nilArgs [] EE' [] @
EvT : evalArgs FE_T EE_T nilArgs V_T EE_T' O_T
============================
 [] = V_T /\ [] = O_T
 < case EvT.

Subgoal 9.5.1:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalArgs FE EE' nilArgs [] EE' [] @
============================
 [] = [] /\ [] = []
 < search.

Subgoal 9.5.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args (consArgs E Rest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 V1::VRest = V_T /\ O = O_T
 < case IsA.

Subgoal 9.5.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 V1::VRest = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
EvT : evalArgs FE_T EE_T (consArgs E2 A2) V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
============================
 V1::VRest = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 V1::VRest = V2::VRest1 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 V2::VRest = V2::VRest1 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 V2::VRest = V2::VRest1 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 V2::VRest = V2::VRest1 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
============================
 V2::VRest = V2::VRest1 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 V2::VRest = V2::VRest1 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 V2::VRest = V2::VRest1 /\ O = O_T
 < apply IH_A to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest1) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest1 EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 V2::VRest1 = V2::VRest1 /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.5.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest1) EE' O_T @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalArgs FE EE3 Rest VRest1 EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 V2::VRest1 = V2::VRest1 /\ O_T = O_T
 < search.

Subgoal 9.5.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args <unknown K evalArgs>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
============================
 V = V_T /\ O = O_T
 < Or: apply is_args_nilArgs_or_consArgs to IsA.

Subgoal 9.5.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args <unknown K evalArgs>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
Or : <unknown K evalArgs> = nilArgs \/
     (exists E A', <unknown K evalArgs> = consArgs E A')
============================
 V = V_T /\ O = O_T
 < case Or.

Subgoal 9.6.1:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transA Names nilArgs T
Ev : evalArgs FE EE' nilArgs [] EE' [] @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.6.1:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalArgs FE EE' nilArgs [] EE' [] @
EvT : evalArgs FE_T EE_T nilArgs V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.6.1:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalArgs FE EE' nilArgs [] EE' [] @
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.6.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args (consArgs E Rest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsA.

Subgoal 9.6.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
EvT : evalArgs FE_T EE_T (consArgs E2 A2) V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_A_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.6.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H3 : scopes_same EE3 EE1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_expr E2
H6 : is_list (is_list (is_pair is_string is_value)) EE1
H7 : ctx_names EE3 Names
H8 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.6.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args <unknown K evalArgs>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < Or: apply is_args_nilArgs_or_consArgs to IsA.

Subgoal 9.6.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsA : is_args <unknown K evalArgs>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
EvT : evalArgs FE_T EE_T T V_T EE_T' O_T
Or : <unknown K evalArgs> = nilArgs \/
     (exists E A', <unknown K evalArgs> = consArgs E A')
============================
 scopes_same EE' EE_T'
 < case Or.

Subgoal 9.7.1:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transRF Names nilRecFieldExprs T
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
============================
 [] = V_T /\ [] = O_T
 < case Trans.

Subgoal 9.7.1:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
EvT : evalRecFields FE_T EE_T nilRecFieldExprs V_T EE_T' O_T
============================
 [] = V_T /\ [] = O_T
 < case EvT.

Subgoal 9.7.1:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
============================
 [] = [] /\ [] = []
 < search.

Subgoal 9.7.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 (F, V1)::VRest = V_T /\ O = O_T
 < case IsRF.

Subgoal 9.7.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 (F, V1)::VRest = V_T /\ O = O_T
 < Trans: case Trans.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
EvT : evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
============================
 (F, V1)::VRest = V_T /\ O = O_T
 < EvT: case EvT.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 (F, V1)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
============================
 (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply transE_is to _ _ Trans.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
============================
 (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O1 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names
============================
 (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
 < apply IH_RF to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest1) EE' O @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest1 EE' O4 *
Ev3 : O1 ++ O4 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names
============================
 (F, V2)::VRest1 = (F, V2)::VRest1 /\ O = O_T
 < apply append_unique to Ev3 EvT2.

Subgoal 9.7.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest1) EE' O_T @
Ev1 : evalExpr FE EE E V2 EE3 O1 *
Ev2 : evalRecFields FE EE3 Rest VRest1 EE' O4 *
Ev3 : O1 ++ O4 = O_T
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names
============================
 (F, V2)::VRest1 = (F, V2)::VRest1 /\ O_T = O_T
 < search.

Subgoal 9.7.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
============================
 V = V_T /\ O = O_T
 < Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF.

Subgoal 9.7.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
Or : <unknown K evalRecFields> = nilRecFieldExprs \/
     (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF')
============================
 V = V_T /\ O = O_T
 < case Or.

Subgoal 9.8.1:

Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transRF Names nilRecFieldExprs T
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case Trans.

Subgoal 9.8.1:

Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
EvT : evalRecFields FE_T EE_T nilRecFieldExprs V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < case EvT.

Subgoal 9.8.1:

Variables: Names FE FE_T EE' EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T'
Ctxs : ctx_names EE' Names
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.8.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 scopes_same EE' EE_T'
 < case IsRF.

Subgoal 9.8.2:

Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 scopes_same EE' EE_T'
 < Trans: case Trans.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
EvT : evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T EE_T' O_T
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
============================
 scopes_same EE' EE_T'
 < EvT: case EvT.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
============================
 scopes_same EE' EE_T'
 < apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 scopes_same EE' EE_T'
 < apply transE_is to _ _ Trans.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
============================
 scopes_same EE' EE_T'
 < apply evalExpr_isCtx to _ _ _ EvT.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
============================
 scopes_same EE' EE_T'
 < apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names
============================
 scopes_same EE' EE_T'
 < apply IH_RF_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1.

Subgoal 9.8.2:

Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvT : evalExpr FE_T EE_T E2 V2 EE1 O1
EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4
EvT2 : O1 ++ O4 = O_T
H4 : scopes_same EE3 EE1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE1
H8 : ctx_names EE3 Names
H9 : scopes_same EE' EE_T'
============================
 scopes_same EE' EE_T'
 < search.

Subgoal 9.8.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
============================
 scopes_same EE' EE_T'
 < Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF.

Subgoal 9.8.3:

Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T
IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
           evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         evalStmt FE_T EE_T T EE_T' O_T -> O = O_T
IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
           ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
           evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T'
IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
         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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
           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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
           ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
           evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
          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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T
IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T,
            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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
            ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
            evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T'
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T
Or : <unknown K evalRecFields> = nilRecFieldExprs \/
     (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF')
============================
 scopes_same EE' EE_T'
 < case Or.

Proof completed.
 < Theorem paramTys_paramNames :
     forall Ps PTys D PNs,
       paramTys Ps PTys -> domain PTys D -> paramNames Ps PNs -> D = PNs.

============================
 forall Ps PTys D PNs,
   paramTys Ps PTys -> domain PTys D -> paramNames Ps PNs -> D = PNs
 < induction on 1.

IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
============================
 forall Ps PTys D PNs,
   paramTys Ps PTys @ -> domain PTys D -> paramNames Ps PNs -> D = PNs
 < intros PT D PN.

Variables: Ps PTys D PNs
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
PT : paramTys Ps PTys @
D : domain PTys D
PN : paramNames Ps PNs
============================
 D = PNs
 < PT: case PT.

Subgoal 1:

Variables: D PNs
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
D : domain [] D
PN : paramNames [] PNs
============================
 D = PNs
 < case D.

Subgoal 1:

Variables: PNs
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
PN : paramNames [] PNs
============================
 [] = PNs
 < case PN.

Subgoal 1:

IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
============================
 [] = []
 < search.

Subgoal 2:

Variables: D PNs RestTys PTy PName Rest P
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
D : domain ((PName, PTy)::RestTys) D
PN : paramNames (P::Rest) PNs
PT : paramTy P PName PTy
PT1 : paramTys Rest RestTys *
============================
 D = PNs
 < D: case D.

Subgoal 2:

Variables: PNs RestTys PTy PName Rest P DRest
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
PN : paramNames (P::Rest) PNs
PT : paramTy P PName PTy
PT1 : paramTys Rest RestTys *
D : domain RestTys DRest
============================
 PName::DRest = PNs
 < PN: case PN.

Subgoal 2:

Variables: RestTys PTy PName Rest P DRest NRest N
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
PT : paramTy P PName PTy
PT1 : paramTys Rest RestTys *
D : domain RestTys DRest
PN : paramName P N
PN1 : paramNames Rest NRest
============================
 PName::DRest = N::NRest
 < apply IH to PT1 D PN1.

Subgoal 2:

Variables: RestTys PTy PName Rest P NRest N
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
PT : paramTy P PName PTy
PT1 : paramTys Rest RestTys *
D : domain RestTys NRest
PN : paramName P N
PN1 : paramNames Rest NRest
============================
 PName::NRest = N::NRest
 < apply paramTy_paramName_same to PT PN.

Subgoal 2:

Variables: RestTys PTy Rest P NRest N
IH : forall Ps PTys D PNs,
       paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs
PT : paramTy P N PTy
PT1 : paramTys Rest RestTys *
D : domain RestTys NRest
PN : paramName P N
PN1 : paramNames Rest NRest
============================
 N::NRest = N::NRest
 < search.

Proof completed.
 < Extensible_Theorem
      trans_getFunEvalInfo_rel : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
         IsF : is_fun F ->
         Trans : transF F F_T ->
         GFEI : getFunEvalInfo F Name RetVar RVVal PNames Body ->
         GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T ->
         exists N,
           (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
           PNames = PNames_T) /\
           transS [RetVar::PNames] Body Body_T N
      on Trans.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body1)
Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @
GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body
GFEI_T : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar1::Names] Body1 Body2 Names1
============================
 exists N,
   (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar::PNames] Body Body_T N
 < case IsF.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @
GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body
GFEI_T : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar1::Names] Body1 Body2 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar1
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body1
============================
 exists N,
   (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar::PNames] Body Body_T N
 < G: case GFEI.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params RetTy
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
Trans : transF (fun Name RetTy RetVar RVVal Params Body) (fun Name RetTy RetVar RVVal Params Body2) @
GFEI_T : getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body2 Names1
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
G : paramNames Params PNames
============================
 exists N,
   (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar::PNames] Body Body_T N
 < GT: case GFEI_T.

Subgoal 1:

Variables: PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Params RetTy
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar_T::Names] Body Body_T Names1
H1 : is_string Name_T
H2 : is_typ RetTy
H3 : is_string RetVar_T
H4 : is_value RVVal_T
H5 : is_list is_param Params
H6 : is_stmt Body
G : paramNames Params PNames
GT : paramNames Params PNames_T
============================
 exists N,
   (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar_T::PNames] Body Body_T N
 < apply paramNames_unique to _ G GT.

Subgoal 1:

Variables: Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Params RetTy
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar_T::Names] Body Body_T Names1
H1 : is_string Name_T
H2 : is_typ RetTy
H3 : is_string RetVar_T
H4 : is_value RVVal_T
H5 : is_list is_param Params
H6 : is_stmt Body
G : paramNames Params PNames_T
GT : paramNames Params PNames_T
============================
 exists N,
   (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\
   PNames_T = PNames_T) /\
   transS [RetVar_T::PNames_T] Body Body_T N
 < apply paramTys_paramNames to Trans1 Trans2 G.

Subgoal 1:

Variables: Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names1 Params RetTy
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys PNames_T
Trans3 : transS [RetVar_T::PNames_T] Body Body_T Names1
H1 : is_string Name_T
H2 : is_typ RetTy
H3 : is_string RetVar_T
H4 : is_value RVVal_T
H5 : is_list is_param Params
H6 : is_stmt Body
G : paramNames Params PNames_T
GT : paramNames Params PNames_T
============================
 exists N,
   (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\
   PNames_T = PNames_T) /\
   transS [RetVar_T::PNames_T] Body Body_T N
 < search.

Subgoal 2:

Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
============================
 exists N,
   (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar::PNames] Body Body_T N
 < G': apply proj_getFunEvalInfo_forward to Trans1 _ GFEI.

Subgoal 2:

Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
G' : getFunEvalInfo F_P Name RetVar RVVal PNames Body
============================
 exists N,
   (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar::PNames] Body Body_T N
 < apply proj_fun_is to Trans1 _.

Subgoal 2:

Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
G' : getFunEvalInfo F_P Name RetVar RVVal PNames Body
H1 : is_fun F_P
============================
 exists N,
   (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
   PNames = PNames_T) /\
   transS [RetVar::PNames] Body Body_T N
 < apply IH to _ Trans2 G' GFEI_T.

Subgoal 2:

Variables: Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P N
IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N,
         (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\
         PNames = PNames_T) /\
         transS [RetVar::PNames] Body Body_T N
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name_T RetVar_T RVVal_T PNames_T Body
GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
G' : getFunEvalInfo F_P Name_T RetVar_T RVVal_T PNames_T Body
H1 : is_fun F_P
H2 : transS [RetVar_T::PNames_T] Body Body_T N
============================
 exists N,
   (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\
   PNames_T = PNames_T) /\
   transS [RetVar_T::PNames_T] Body Body_T N
 < search.

Proof completed.
 < Theorem trans_getFunEvalCtx_rel_FE :
     forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T.

============================
 forall Fs Fs_T FE FE_T,
   is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
   rel_FE FE FE_T
 < induction on 2.

IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
============================
 forall Fs Fs_T FE FE_T,
   is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
   rel_FE FE FE_T
 < intros IsFs Trans GFEI GFEI_T.

Variables: Fs Fs_T FE FE_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun Fs
Trans : transFuns Fs Fs_T @
GFEI : getFunEvalCtx Fs FE
GFEI_T : getFunEvalCtx Fs_T FE_T
============================
 rel_FE FE FE_T
 < Trans: case Trans.

Subgoal 1:

Variables: FE FE_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
GFEI : getFunEvalCtx [] FE
GFEI_T : getFunEvalCtx [] FE_T
============================
 rel_FE FE FE_T
 < case GFEI.

Subgoal 1:

Variables: FE_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
GFEI_T : getFunEvalCtx [] FE_T
============================
 rel_FE [] FE_T
 < case GFEI_T.

Subgoal 1:

IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
============================
 rel_FE [] []
 < unfold .

Subgoal 1.1:

IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
============================
 forall F RetVar RVVal PNames Body,
   lookup [] F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
     lookup [] F (RetVar, (RVVal, (PNames, Body_T))) /\
     transS [RetVar::PNames] Body Body_T Names
 < intros L.

Subgoal 1.1:

Variables: F RetVar RVVal PNames Body
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
L : lookup [] F (RetVar, (RVVal, (PNames, Body)))
============================
 exists Body_T Names,
   lookup [] F (RetVar, (RVVal, (PNames, Body_T))) /\
   transS [RetVar::PNames] Body Body_T Names
 < case L.

Subgoal 1.2:

IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
============================
 forall F RetVar RVVal PNames Body_T,
   lookup [] F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
     lookup [] F (RetVar, (RVVal, (PNames, Body))) /\
     transS [RetVar::PNames] Body Body_T Names
 < intros L.

Subgoal 1.2:

Variables: F RetVar RVVal PNames Body_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun []
L : lookup [] F (RetVar, (RVVal, (PNames, Body_T)))
============================
 exists Body Names,
   lookup [] F (RetVar, (RVVal, (PNames, Body))) /\
   transS [RetVar::PNames] Body Body_T Names
 < case L.

Subgoal 2:

Variables: FE FE_T Rest1 F1 Rest F
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun (F::Rest)
GFEI : getFunEvalCtx (F::Rest) FE
GFEI_T : getFunEvalCtx (F1::Rest1) FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
============================
 rel_FE FE FE_T
 < G: case GFEI.

Subgoal 2:

Variables: FE_T Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun (F::Rest)
GFEI_T : getFunEvalCtx (F1::Rest1) FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest CRest
============================
 rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) FE_T
 < GT: case GFEI_T.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName CRest1 Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
IsFs : is_list is_fun (F::Rest)
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
============================
 rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
 < case IsFs.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName CRest1 Body1 PNames1 RVVal1 RetVar1 FName1
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
============================
 rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
 < apply trans_getFunEvalInfo_rel to _ Trans G GT.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
============================
 rel_FE ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
 < R: apply IH to _ Trans1 G1 GT1.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
============================
 rel_FE ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
 < unfold .

Subgoal 2.1:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
============================
 forall F RetVar RVVal PNames Body2,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F (RetVar, (RVVal, (PNames, Body2))) ->
   exists Body_T Names,
     lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F (RetVar, (RVVal, (PNames, Body_T))) /\
     transS [RetVar::PNames] Body2 Body_T Names
 < intros L.

Subgoal 2.1:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
L : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2)))
============================
 exists Body_T Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < L: case L.

Subgoal 2.1.1:

Variables: Rest1 F1 Rest F CRest CRest1 Body1 N F2 RetVar2 RVVal2 PNames2 Body2
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F F2 RetVar2 RVVal2 PNames2 Body2
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 F2 RetVar2 RVVal2 PNames2 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar2::PNames2] Body2 Body1 N
R : rel_FE CRest CRest1
============================
 exists Body_T Names,
   lookup ((F2, (RetVar2, (RVVal2, (PNames2, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < search.

Subgoal 2.1.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
L : FName1 = F2 -> false
L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2)))
============================
 exists Body_T Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < R: case R.

Subgoal 2.1.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
L : FName1 = F2 -> false
L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2)))
R : forall F RetVar RVVal PNames Body,
      lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists Body_T Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < apply R to L1.

Subgoal 2.1.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 Body_T Names
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
L : FName1 = F2 -> false
L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2)))
R : forall F RetVar RVVal PNames Body,
      lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
H4 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T)))
H5 : transS [RetVar2::PNames2] Body2 Body_T Names
============================
 exists Body_T Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < search.

Subgoal 2.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
============================
 forall F RetVar RVVal PNames Body_T,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F (RetVar, (RVVal, (PNames, Body_T))) ->
   exists Body2 Names,
     lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F (RetVar, (RVVal, (PNames, Body2))) /\
     transS [RetVar::PNames] Body2 Body_T Names
 < intros L.

Subgoal 2.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
L : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T)))
============================
 exists Body2 Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < L: case L.

Subgoal 2.2.1:

Variables: Rest1 F1 Rest F CRest Body CRest1 N F2 RetVar2 RVVal2 PNames2 Body_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F F2 RetVar2 RVVal2 PNames2 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 F2 RetVar2 RVVal2 PNames2 Body_T
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar2::PNames2] Body Body_T N
R : rel_FE CRest CRest1
============================
 exists Body2 Names,
   lookup ((F2, (RetVar2, (RVVal2, (PNames2, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < search.

Subgoal 2.2.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
R : rel_FE CRest CRest1
L : FName1 = F2 -> false
L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T)))
============================
 exists Body2 Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < R: case R.

Subgoal 2.2.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
L : FName1 = F2 -> false
L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T)))
R : forall F RetVar RVVal PNames Body,
      lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists Body2 Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < apply R1 to L1.

Subgoal 2.2.2:

Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T Body2 Names
IH : forall Fs Fs_T FE FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T ->
       rel_FE FE FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body
G1 : getFunEvalCtx Rest CRest
GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1
GT1 : getFunEvalCtx Rest1 CRest1
H1 : is_fun F
H2 : is_list is_fun Rest
H3 : transS [RetVar1::PNames1] Body Body1 N
L : FName1 = F2 -> false
L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T)))
R : forall F RetVar RVVal PNames Body,
      lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
H4 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2)))
H5 : transS [RetVar2::PNames2] Body2 Body_T Names
============================
 exists Body2 Names,
   lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\
   transS [RetVar2::PNames2] Body2 Body_T Names
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalExpr_forward : forall E T Names EE EE_T FE FE_T V EE' O,
         IsE : is_expr 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 ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transE Names E T ->
         Ev : evalExpr FE EE E V EE' O ->
         exists EE_T',
           evalExpr FE_T EE_T T V EE_T' O
      on Ev as IH_E,
      trans_evalStmt_forward : forall S T Names Names' Scope EE EE_T FE FE_T EE' O,
         IsS : is_stmt S ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same (Scope::EE) EE_T ->
         Ctxs : ctx_names (Scope::EE) Names ->
         Trans : transS Names S T Names' ->
         Ev : evalStmt FE (Scope::EE) S EE' O ->
         exists EE_T',
           evalStmt FE_T EE_T T EE_T' O
      on Ev as IH_S,
      trans_evalArgs_forward : forall A T Names EE EE_T FE FE_T V EE' O,
         IsA : is_args A ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transA Names A T ->
         Ev : evalArgs FE EE A V EE' O ->
         exists EE_T',
           evalArgs FE_T EE_T T V EE_T' O
      on Ev as IH_A,
      trans_evalRecFields_forward : forall RF T Names EE EE_T FE FE_T V EE' O,
         IsRF : is_recFieldExprs RF ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transRF Names RF T ->
         Ev : evalRecFields FE EE RF V EE' O ->
         exists EE_T',
           evalRecFields FE_T EE_T T V EE_T' O
      on Ev as IH_RF.

Subgoal 1:

Variables: E T Names EE EE_T FE FE_T V EE' O
IsE : is_expr 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names E T
Ev : evalExpr FE EE E V EE' O
============================
 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)
 < search.

Subgoal 2:

Variables: S T Names Names' Scope EE EE_T FE FE_T EE' O
IsS : is_stmt S
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names S T Names'
Ev : evalStmt FE (Scope::EE) S EE' O
============================
 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) /\ is_stmt S)
 < search.

Subgoal 3:

Variables: A T Names EE EE_T FE FE_T V EE' O
IsA : is_args A
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names A T
Ev : evalArgs FE EE A V EE' O
============================
 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)
 < search.

Subgoal 4:

Variables: RF T Names EE EE_T FE FE_T V EE' O
IsRF : is_recFieldExprs RF
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names RF T
Ev : evalRecFields FE EE RF V EE' O
============================
 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)
 < search.

Subgoal 5.1.1:

Variables: T Names EE_T FE FE_T EE' I
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (num I) T
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' []
 < case Trans.

Subgoal 5.1.1:

Variables: Names EE_T FE FE_T EE' I
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T (num I) (intVal I) EE_T' []
 < search.

Subgoal 5.1.2:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (plus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < case IsE.

Subgoal 5.1.2:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) T
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < Trans: case Trans.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.2:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 + I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
 < search.

Subgoal 5.1.3:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (minus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < case IsE.

Subgoal 5.1.3:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) T
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < Trans: case Trans.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.3:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 - I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
 < search.

Subgoal 5.1.4:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (mult E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < case IsE.

Subgoal 5.1.4:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) T
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < Trans: case Trans.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.4:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 * I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
 < search.

Subgoal 5.1.5:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (div E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < case IsE.

Subgoal 5.1.5:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) T
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
 < Trans: case Trans.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.5:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 / I2 = I
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
 < search.

Subgoal 5.1.6:

Variables: T Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names true T
Ev : evalExpr FE EE' true trueVal EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' []
 < case Trans.

Subgoal 5.1.6:

Variables: Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' true trueVal EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T true trueVal EE_T' []
 < search.

Subgoal 5.1.7:

Variables: T Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names false T
Ev : evalExpr FE EE' false falseVal EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' []
 < case Trans.

Subgoal 5.1.7:

Variables: Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' false falseVal EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T false falseVal EE_T' []
 < search.

Subgoal 5.1.8:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < case IsE.

Subgoal 5.1.8:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.8:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 trueVal EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
 < search.

Subgoal 5.1.9:

Variables: T Names EE EE_T FE FE_T EE' O E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < case IsE.

Subgoal 5.1.9:

Variables: T Names EE EE_T FE FE_T EE' O E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.9:

Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.9:

Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : evalExpr FE_T EE_T E11 falseVal EE_T' O
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < search.

Subgoal 5.1.10:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < case IsE.

Subgoal 5.1.10:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) T
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.10:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 falseVal EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
 < search.

Subgoal 5.1.11:

Variables: T Names EE EE_T FE FE_T EE' O E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < case IsE.

Subgoal 5.1.11:

Variables: T Names EE EE_T FE FE_T EE' O E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.11:

Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.11:

Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
H3 : evalExpr FE_T EE_T E11 trueVal EE_T' O
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < search.

Subgoal 5.1.12:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < case IsE.

Subgoal 5.1.12:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.12:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 trueVal EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
 < search.

Subgoal 5.1.13:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < case IsE.

Subgoal 5.1.13:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) T
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.13:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE3 O2 *
Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 falseVal EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
 < search.

Subgoal 5.1.14:

Variables: T Names EE EE_T FE FE_T EE' O E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < case IsE.

Subgoal 5.1.14:

Variables: T Names EE EE_T FE FE_T EE' O E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.14:

Variables: Names EE EE_T FE FE_T EE' O E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 exists EE_T', evalExpr FE_T EE_T (not E3) trueVal EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.14:

Variables: Names EE EE_T FE FE_T EE' O E1 E3 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) trueVal EE' O @
Ev1 : evalExpr FE EE E1 falseVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
H2 : evalExpr FE_T EE_T E3 falseVal EE_T' O
============================
 exists EE_T', evalExpr FE_T EE_T (not E3) trueVal EE_T' O
 < search.

Subgoal 5.1.15:

Variables: T Names EE EE_T FE FE_T EE' O E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < case IsE.

Subgoal 5.1.15:

Variables: T Names EE EE_T FE FE_T EE' O E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) T
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.15:

Variables: Names EE EE_T FE FE_T EE' O E1 E3
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
============================
 exists EE_T', evalExpr FE_T EE_T (not E3) falseVal EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.15:

Variables: Names EE EE_T FE FE_T EE' O E1 E3 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (not E1) falseVal EE' O @
Ev1 : evalExpr FE EE E1 trueVal EE' O *
H1 : is_expr E1
Trans : transE Names E1 E3
H2 : evalExpr FE_T EE_T E3 trueVal EE_T' O
============================
 exists EE_T', evalExpr FE_T EE_T (not E3) falseVal EE_T' O
 < search.

Subgoal 5.1.16:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < case IsE.

Subgoal 5.1.16:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.16:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 > I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
 < search.

Subgoal 5.1.17:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < case IsE.

Subgoal 5.1.17:

Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) T
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.17:

Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 *
Ev3 : I1 <= I2
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
 < search.

Subgoal 5.1.18:

Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < case IsE.

Subgoal 5.1.18:

Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.18:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V1 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 V1 EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
 < search.

Subgoal 5.1.19:

Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < case IsE.

Subgoal 5.1.19:

Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) T
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
 < Trans: case Trans.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.19:

Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @
Ev1 : evalExpr FE EE E1 V1 EE3 O2 *
Ev2 : evalExpr FE EE3 E2 V2 EE' O3 *
Ev3 : V1 = V2 -> false
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 V2 EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
 < search.

Subgoal 5.1.20:

Variables: T Names EE_T FE FE_T EE' S
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (stringLit S) T
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T T (stringVal S) EE_T' []
 < case Trans.

Subgoal 5.1.20:

Variables: Names EE_T FE FE_T EE' S
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @
============================
 exists EE_T', evalExpr FE_T EE_T (stringLit S) (stringVal S) EE_T' []
 < search.

Subgoal 5.1.21:

Variables: T Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (appString E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T (stringVal S) EE_T' O
 < case IsE.

Subgoal 5.1.21:

Variables: T Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) T
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE_T', evalExpr FE_T EE_T T (stringVal S) EE_T' O
 < Trans: case Trans.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.1.21:

Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @
Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 *
Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 *
Ev3 : S1 ++ S2 = S
Ev4 : O2 ++ O3 = O
H1 : is_expr E1
H2 : is_expr E2
Trans : transE Names E1 E11
Trans1 : transE Names E2 E21
EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E11
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalExpr FE_T EE_T' E21 (stringVal S2) EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
 < search.

Subgoal 5.1.22:

Variables: T Names EE_T FE FE_T V EE' X
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (name X)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (name X) T
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' []
 < case IsE.

Subgoal 5.1.22:

Variables: T Names EE_T FE FE_T V EE' X
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transE Names (name X) T
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
H1 : is_string X
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' []
 < case Trans.

Subgoal 5.1.22:

Variables: Names EE_T FE FE_T V EE' X
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
H1 : is_string X
============================
 exists EE_T', evalExpr FE_T EE_T (name X) V EE_T' []
 < LT: apply scopes_same_lookupScopes_exists to _ _ SS Ev1.

Subgoal 5.1.22:

Variables: Names EE_T FE FE_T V EE' X
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalExpr FE EE' (name X) V EE' [] @
Ev1 : lookupScopes X EE' V
H1 : is_string X
LT : lookupScopes X EE_T V
============================
 exists EE_T', evalExpr FE_T EE_T (name X) V EE_T' []
 < search.

Subgoal 5.1.23:

Variables: T Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (call Fun Args)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < case IsE.

Subgoal 5.1.23:

Variables: T Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call Fun Args) T
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < Trans: case Trans.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < R: case RFE (keep).

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < LF: apply R to Ev1.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < clear R.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < EvB1: apply IH_A to _ _ _ _ _ _ RFE SS _ Trans Ev2.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv).

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < apply zip_ctx_names to Z.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < apply evalArgs_isValue to _ _ _ Ev2.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < IsP: apply lookup_is_value_funCtx to _ Ev1.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body)))
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < IsP: case IsP.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body))
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < IsP: case IsP1.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body)
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < IsP: case IsP2.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < IsInitEnv: apply zip_is to _ _ Z.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < IsIE: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv].

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < SS_IE: apply scopes_same_reflexive to IsIE.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE SS_IE _ LF1 Ev4.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < R: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ LF1 Ev4 EvB2.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3
R : scopes_same EE3 EE_T'1
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < apply transS_is to _ _ LF1.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3
R : scopes_same EE3 EE_T'1
H5 : is_stmt Body_T
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < apply evalStmt_isCtx to _ _ _ EvB2.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3
R : scopes_same EE3 EE_T'1
H5 : is_stmt Body_T
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'1
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < apply scopes_same_lookupScopes_exists to _ _ R Ev6.

Subgoal 5.1.23:

Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (call Fun Args) V EE' O @
Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body)))
Ev2 : evalArgs FE EE Args ArgVals EE' O2 *
Ev3 : zip ArgNames ArgVals InitEnv
Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev5 : O2 ++ O3 = O
Ev6 : lookupScopes RetVar EE3 V
H1 : is_string Fun
H2 : is_args Args
Trans : transA Names Args A1
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T)))
LF1 : transS [RetVar::ArgNames] Body Body_T Names1
EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]
SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3
R : scopes_same EE3 EE_T'1
H5 : is_stmt Body_T
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'1
H7 : lookupScopes RetVar EE_T'1 V
============================
 exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
 < search.

Subgoal 5.1.24:

Variables: T Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (stmtExpr S 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < case IsE.

Subgoal 5.1.24:

Variables: T Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) T
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < Trans: case Trans.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < apply ctx_names_add_scope to Ctxs.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < SS': apply scopes_same_add_scope to SS.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < EvB1: apply IH_S to _ _ _ _ _ _ RFE SS' _ Trans Ev1.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < apply transS_is to _ _ Trans.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < apply evalStmt_isCtx to _ _ _ EvB1.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < apply transS_isNames to _ _ Trans.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : is_list (is_list is_string) Names2
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : is_list (is_list is_string) Names2
C : ctx_names EE3 Names2
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < SS'': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : is_list (is_list is_string) Names2
C : ctx_names EE3 Names2
SS'' : scopes_same EE3 EE_T'
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < EvB2: apply IH_E to _ _ _ _ _ _ RFE SS'' _ Trans1 Ev2.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : is_list (is_list is_string) Names2
C : ctx_names EE3 Names2
SS'' : scopes_same EE3 EE_T'
EvB2 : evalExpr FE_T EE_T' E3 V EE_T'1 O3
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < SS+: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvB2.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : is_list (is_list is_string) Names2
C : ctx_names EE3 Names2
SS'' : scopes_same EE3 EE_T'
EvB2 : evalExpr FE_T EE_T' E3 V EE_T'1 O3
SS+ : scopes_same (Scope::EE') EE_T'1
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < case SS+.

Subgoal 5.1.24:

Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @
Ev1 : evalStmt FE ([]::EE) S EE3 O2 *
Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S
H2 : is_expr E1
Trans : transS ([]::Names) S S2 Names2
Trans1 : transE Names2 E1 E3
H3 : ctx_names ([]::EE) ([]::Names)
SS' : scopes_same ([]::EE) ([]::EE_T)
EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2
H4 : is_stmt S2
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : is_list (is_list is_string) Names2
C : ctx_names EE3 Names2
SS'' : scopes_same EE3 EE_T'
EvB2 : evalExpr FE_T EE_T' E3 V (B::BRest) O3
H8 : forall X V, lookup Scope X V -> lookup B X V
H9 : forall X V, lookup B X V -> lookup Scope X V
H10 : scopes_same EE' BRest
============================
 exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
 < search.

Subgoal 5.1.25:

Variables: T Names EE EE_T FE FE_T EE' O VF RF
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (recBuild RF)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
============================
 exists EE_T', evalExpr FE_T EE_T T (recVal VF) EE_T' O
 < case IsE.

Subgoal 5.1.25:

Variables: T Names EE EE_T FE FE_T EE' O VF RF
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) T
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
============================
 exists EE_T', evalExpr FE_T EE_T T (recVal VF) EE_T' O
 < Trans: case Trans.

Subgoal 5.1.25:

Variables: Names EE EE_T FE FE_T EE' O VF RF RF2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
============================
 exists EE_T', evalExpr FE_T EE_T (recBuild RF2) (recVal VF) EE_T' O
 < apply IH_RF to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.1.25:

Variables: Names EE EE_T FE FE_T EE' O VF RF RF2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @
Ev1 : evalRecFields FE EE RF VF EE' O *
H1 : is_recFieldExprs RF
Trans : transRF Names RF RF2
H2 : evalRecFields FE_T EE_T RF2 VF EE_T' O
============================
 exists EE_T', evalExpr FE_T EE_T (recBuild RF2) (recVal VF) EE_T' O
 < search.

Subgoal 5.1.26:

Variables: T Names EE EE_T FE FE_T V EE' O Fields F Rec
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr (recFieldAccess Rec F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < case IsE.

Subgoal 5.1.26:

Variables: T Names EE EE_T FE FE_T V EE' O Fields F Rec
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess Rec F) T
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < Trans: case Trans.

Subgoal 5.1.26:

Variables: Names EE EE_T FE FE_T V EE' O Fields F Rec E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
============================
 exists EE_T', evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.1.26:

Variables: Names EE EE_T FE FE_T V EE' O Fields F Rec E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @
Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O *
Ev2 : lookup Fields F V
H1 : is_expr Rec
H2 : is_string F
Trans : transE Names Rec E2
H3 : evalExpr FE_T EE_T E2 (recVal Fields) EE_T' O
============================
 exists EE_T', evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O
 < search.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < apply names_is to _ Ev1.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < apply proj_expr_is to Ev2 _ _.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown K evalExpr> T
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_expr E_P
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < Trans: case Trans.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N E_P1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_expr E_P
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1
Trans2 : transE Names E_P1 T
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < apply proj_expr_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_expr E_P
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans2 Ev3.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_expr E_P
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H3 : evalExpr FE_T EE_T T V_P EE_T' O_P
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < Ev': apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N EE_T' EE''
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_expr E_P
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H3 : evalExpr FE_T EE_T T V_P EE_T' O_P
Ev' : evalExpr FE EE E_P V EE'' O
Ev'1 : scopes_same EE' EE''
============================
 exists EE_T', evalExpr FE_T EE_T T V EE_T' O
 < apply evalExpr_unique to _ _ _ Ev' Ev3.

Subgoal 5.1.27:

Variables: T Names EE EE_T FE FE_T EE' Names1 E_P V_P EE_P O_P N EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsE : is_expr <unknown K evalExpr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @
Ev1 : names EE Names1
Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P
Ev3 : evalExpr FE EE E_P V_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_expr E_P
Trans : join Names N
Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P
Trans2 : transE Names E_P T
H3 : evalExpr FE_T EE_T T V_P EE_T' O_P
Ev' : evalExpr FE EE E_P V_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
============================
 exists EE_T', evalExpr FE_T EE_T T V_P EE_T' O_P
 < search.

Subgoal 5.2.1:

Variables: T Names Names' Scope EE EE_T FE FE_T
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names noop T Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' []
 < case Trans.

Subgoal 5.2.1:

Variables: Names' Scope EE EE_T FE FE_T
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @
============================
 exists EE_T', evalStmt FE_T EE_T noop EE_T' []
 < search.

Subgoal 5.2.2:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (seq S1 S2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.2:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) T Names'
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < EvB1: apply IH_S to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < apply transS_is to _ _ Trans.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < apply transS_isNames to _ _ Trans.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < apply evalStmt_isCtx to _ _ _ EvB1.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1.

Subgoal 5.2.2:

Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS Names S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C : ctx_names EE3 Names3
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < case Ctxs.

Subgoal 5.2.2:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 Names3
Trans1 : transS Names3 S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) Names3
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C : ctx_names EE3 Names3
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < apply transS_old_scopes to _ _ Trans.

Subgoal 5.2.2:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) (Scope'::BRest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C : ctx_names EE3 (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < SS': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.2.2:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 *
Ev2 : evalStmt FE EE3 S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) (Scope'::BRest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C : ctx_names EE3 (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
SS' : scopes_same EE3 EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < case C (keep).

Subgoal 5.2.2:

Variables: Names' Scope EE EE_T FE FE_T EE' O O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' ARest A
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) (Scope'::BRest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
SS' : scopes_same (A::ARest) EE_T'
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE SS' _ Trans1 Ev2.

Subgoal 5.2.2:

Variables: Names' Scope EE EE_T FE FE_T EE' O O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' ARest A EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @
Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 *
Ev2 : evalStmt FE (A::ARest) S2 EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_stmt S1
H2 : is_stmt S2
Trans : transS (B::BRest) S1 S11 (Scope'::BRest)
Trans1 : transS (Scope'::BRest) S2 S21 Names'
EvB1 : evalStmt FE_T EE_T S11 EE_T' O2
H3 : is_stmt S11
H4 : is_list (is_list is_string) (Scope'::BRest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
C : ctx_names (A::ARest) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
SS' : scopes_same (A::ARest) EE_T'
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
EvB2 : evalStmt FE_T EE_T' S21 EE_T'1 O3
============================
 exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
 < search.

Subgoal 5.2.3:

Variables: T Names Names' Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (declare Ty X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.3:

Variables: T Names Names' Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (declare Ty X E) T Names'
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.3:

Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.3:

Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.2.3:

Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB.

Subgoal 5.2.3:

Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
SS' : scopes_same (Scope1::EE2) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < case SS'.

Subgoal 5.2.3:

Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope2::Names1)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope2::Names1)
Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @
Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O *
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
Trans : transE (Scope2::Names1) E E2
EvB : evalExpr FE_T EE_T E2 V (B::BRest) O
H4 : is_expr E2
H5 : forall X V, lookup Scope1 X V -> lookup B X V
H6 : forall X V, lookup B X V -> lookup Scope1 X V
H7 : scopes_same EE2 BRest
============================
 exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
 < search.

Subgoal 5.2.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 E X
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (assign X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.4:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 E X
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (assign X E) T Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H3 : is_expr E2
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H3 : is_expr E2
SS' : scopes_same EE3 EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H3 : is_expr E2
SS' : scopes_same EE3 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H3 : is_expr E2
SS' : scopes_same EE3 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < apply scopes_same_replaceScopes_exists to _ _ _ SS' Ev2.

Subgoal 5.2.4:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' B'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : replaceScopes X V EE3 EE'
H1 : is_string X
H2 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H3 : is_expr E2
SS' : scopes_same EE3 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : replaceScopes X V EE_T' B'
============================
 exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
 < search.

Subgoal 5.2.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (recUpdate Rec Fields 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.5:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (recUpdate Rec Fields E) T Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < EvB: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
SS' : scopes_same EE3 EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply scopes_same_replaceScopes_exists to _ _ _ SS' Ev4.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' B'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : replaceScopes Rec (recVal NewVals) EE_T' B'
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < apply scopes_same_lookupScopes_exists to _ _ SS Ev2.

Subgoal 5.2.5:

Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' B'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E V EE3 O *
Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals)
Ev3 : updateRecFields Fields V FieldVals NewVals
Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE'
H1 : is_string Rec
H2 : is_list is_string Fields
H3 : is_expr E
Trans : transE Names' E E2
EvB : evalExpr FE_T EE_T E2 V EE_T' O
H4 : is_expr E2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
H7 : replaceScopes Rec (recVal NewVals) EE_T' B'
H8 : lookupScopes Rec EE_T (recVal FieldVals)
============================
 exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
 < search.

Subgoal 5.2.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.6:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply ctx_names_add_scope to C.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply scopes_same_add_scope to SS'.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Th2 EE_T'1 O3
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvB2.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Th2 EE_T'1 O3
SS+ : scopes_same (Scope1::EE') EE_T'1
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < case SS+.

Subgoal 5.2.6:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Th2 (B::BRest) O3
H9 : forall X V, lookup Scope1 X V -> lookup B X V
H10 : forall X V, lookup B X V -> lookup Scope1 X V
H11 : scopes_same EE' BRest
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < search.

Subgoal 5.2.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.7:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (ifThenElse Cond Th El) T Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply ctx_names_add_scope to C.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < apply scopes_same_add_scope to SS'.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev2.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') El2 EE_T'1 O3
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvB2.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') El2 EE_T'1 O3
SS+ : scopes_same (Scope1::EE') EE_T'1
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < case SS+.

Subgoal 5.2.7:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 *
Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Th Th2 NamesTh
Trans2 : transS ([]::Names') El El2 NamesEl
EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2
H4 : is_expr Cond2
SS' : scopes_same EE3 EE_T'
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE3 Names'
H7 : ctx_names ([]::EE3) ([]::Names')
H8 : scopes_same ([]::EE3) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') El2 (B::BRest) O3
H9 : forall X V, lookup Scope1 X V -> lookup B X V
H10 : forall X V, lookup B X V -> lookup Scope1 X V
H11 : scopes_same EE' BRest
============================
 exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
 < search.

Subgoal 5.2.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.8:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans (keep).

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans1 Ev1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply transE_is to _ _ Trans1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvB1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 Ev1.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply ctx_names_add_scope to C.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply scopes_same_add_scope to SS'.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 EE_T'1 O3
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvB2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 EE_T'1 O3
SS+ : scopes_same (Scope1::EE4) EE_T'1
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < SS'': case SS+.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply transS_is to _ _ Trans2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case IsEE4+.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < IsBR+: apply evalStmt_isCtx to _ _ _ EvB2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
IsBR+ : is_list (is_list (is_pair is_string is_value)) (B::BRest)
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case IsBR+.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < C': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev2.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 Names2
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : ctx_names (Scope1::EE4) Names2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < C': case C'.

Subgoal 5.2.8:

Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest1 B1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE Names' Cond Cond2
Trans2 : transS ([]::Names') Body Body2 (B1::BRest1)
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 Names'
H6 : ctx_names ([]::EE2) ([]::Names')
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : forall K I, mem (K, I) Scope1 -> mem K B1
C'1 : forall K, mem K B1 -> exists I, mem (K, I) Scope1
C'2 : ctx_names EE4 BRest1
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case Ctxs.

Subgoal 5.2.8:

Variables: Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest1 B1 BRest2 B2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 *
Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B2::BRest2) Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (B1::BRest1)
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same EE2 EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
C : ctx_names EE2 (B2::BRest2)
H6 : ctx_names ([]::EE2) ([]::(B2::BRest2))
H7 : scopes_same ([]::EE2) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : forall K I, mem (K, I) Scope1 -> mem K B1
C'1 : forall K, mem K B1 -> exists I, mem (K, I) Scope1
C'2 : ctx_names EE4 BRest1
H13 : forall K I, mem (K, I) Scope -> mem K B2
H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope
H15 : ctx_names EE BRest2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case C.

Subgoal 5.2.8:

Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest1 B1 BRest2 B2 ARest A
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B2::BRest2) Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (B1::BRest1)
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same (A::ARest) EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2))
H7 : scopes_same ([]::(A::ARest)) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : forall K I, mem (K, I) Scope1 -> mem K B1
C'1 : forall K, mem K B1 -> exists I, mem (K, I) Scope1
C'2 : ctx_names EE4 BRest1
H13 : forall K I, mem (K, I) Scope -> mem K B2
H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope
H15 : ctx_names EE BRest2
H16 : forall K I, mem (K, I) A -> mem K B2
H17 : forall K, mem K B2 -> exists I, mem (K, I) A
H18 : ctx_names ARest BRest2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 5.2.8:

Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest2 B2 ARest A Scope'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O3 *
Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B2::BRest2) Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'::(B2::BRest2))
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same (A::ARest) EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2))
H7 : scopes_same ([]::(A::ARest)) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same EE4 BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) EE4
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C'1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
C'2 : ctx_names EE4 (B2::BRest2)
H13 : forall K I, mem (K, I) Scope -> mem K B2
H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope
H15 : ctx_names EE BRest2
H16 : forall K I, mem (K, I) A -> mem K B2
H17 : forall K, mem K B2 -> exists I, mem (K, I) A
H18 : ctx_names ARest BRest2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < case C'2.

Subgoal 5.2.8:

Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest2 B2 ARest A Scope' ARest1 A1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B2::BRest2) Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'::(B2::BRest2))
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same (A::ARest) EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2))
H7 : scopes_same ([]::(A::ARest)) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same (A1::ARest1) BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C'1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H13 : forall K I, mem (K, I) Scope -> mem K B2
H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope
H15 : ctx_names EE BRest2
H16 : forall K I, mem (K, I) A -> mem K B2
H17 : forall K, mem K B2 -> exists I, mem (K, I) A
H18 : ctx_names ARest BRest2
H19 : forall K I, mem (K, I) A1 -> mem K B2
H20 : forall K, mem K B2 -> exists I, mem (K, I) A1
H21 : ctx_names ARest1 BRest2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply IH_S to _ _ _ _ _ _ RFE SS''2 _ Trans Ev3.

Subgoal 5.2.8:

Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest2 B2 ARest A Scope' ARest1 A1 EE_T'2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B2::BRest2)
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2)
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 *
Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 *
Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 *
Ev4 : O2 ++ O3 = O12
Ev5 : O12 ++ O4 = O
H1 : is_expr Cond
H2 : is_stmt Body
Trans1 : transE (B2::BRest2) Cond Cond2
Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'::(B2::BRest2))
EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2
H3 : is_expr Cond2
SS' : scopes_same (A::ARest) EE_T'
H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H5 : is_list (is_list (is_pair is_string is_value)) EE_T'
H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2))
H7 : scopes_same ([]::(A::ARest)) ([]::EE_T')
EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3
SS'' : forall X V, lookup Scope1 X V -> lookup B X V
SS''1 : forall X V, lookup B X V -> lookup Scope1 X V
SS''2 : scopes_same (A1::ARest1) BRest
H8 : is_stmt Body2
H9 : is_list (is_pair is_string is_value) Scope1
H10 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
H11 : is_list (is_pair is_string is_value) B
H12 : is_list (is_list (is_pair is_string is_value)) BRest
C' : forall K I, mem (K, I) Scope1 -> mem K Scope'
C'1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1
H13 : forall K I, mem (K, I) Scope -> mem K B2
H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope
H15 : ctx_names EE BRest2
H16 : forall K I, mem (K, I) A -> mem K B2
H17 : forall K, mem K B2 -> exists I, mem (K, I) A
H18 : ctx_names ARest BRest2
H19 : forall K I, mem (K, I) A1 -> mem K B2
H20 : forall K, mem K B2 -> exists I, mem (K, I) A1
H21 : ctx_names ARest1 BRest2
H22 : evalStmt FE_T BRest (while Cond2 Body2) EE_T'2 O4
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < search.

Subgoal 5.2.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.9:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Body Cond
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (while Cond Body) T Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.9:

Variables: Names' Scope EE EE_T FE FE_T EE' O Body Cond Names2 Body2 Cond2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.9:

Variables: Names' Scope EE EE_T FE FE_T EE' O Body Cond Names2 Body2 Cond2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @
Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O *
H1 : is_expr Cond
H2 : is_stmt Body
Trans : transE Names' Cond Cond2
Trans1 : transS ([]::Names') Body Body2 Names2
H3 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O
============================
 exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
 < search.

Subgoal 5.2.10:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Scope1 S1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (scopeStmt S1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.10:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Scope1 S1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (scopeStmt S1) T Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < SS': apply scopes_same_add_scope to SS.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < Ctxs': apply ctx_names_add_scope to Ctxs.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names')
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < EvB: apply IH_S to _ _ _ _ _ _ RFE SS' Ctxs' Trans Ev1.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O
SS+ : scopes_same (Scope1::EE') EE_T'
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < case SS+.

Subgoal 5.2.10:

Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 BRest B
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @
Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O *
H1 : is_stmt S1
Trans : transS ([]::Names') S1 S3 Names2
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names')
EvB : evalStmt FE_T ([]::EE_T) S3 (B::BRest) O
H2 : forall X V, lookup Scope1 X V -> lookup B X V
H3 : forall X V, lookup B X V -> lookup Scope1 X V
H4 : scopes_same EE' BRest
============================
 exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
 < search.

Subgoal 5.2.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O I O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.11:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O I O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.11:

Variables: Names' Scope EE EE_T FE FE_T EE' O I O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.11:

Variables: Names' Scope EE EE_T FE FE_T EE' O I O2 E E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 *
Ev2 : O2 ++ [intVal I] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : evalExpr FE_T EE_T E2 (intVal I) EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < search.

Subgoal 5.2.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.12:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.12:

Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.12:

Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 *
Ev2 : O2 ++ [trueVal] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : evalExpr FE_T EE_T E2 trueVal EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < search.

Subgoal 5.2.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.13:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.13:

Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.13:

Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 *
Ev2 : O2 ++ [falseVal] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : evalExpr FE_T EE_T E2 falseVal EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < search.

Subgoal 5.2.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O S1 O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < case IsS.

Subgoal 5.2.14:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O S1 O2 E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (printVal E) T Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.14:

Variables: Names' Scope EE EE_T FE FE_T EE' O S1 O2 E E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1.

Subgoal 5.2.14:

Variables: Names' Scope EE EE_T FE FE_T EE' O S1 O2 E E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @
Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 *
Ev2 : O2 ++ [stringVal S1] = O
H1 : is_expr E
Trans : transE Names' E E2
H2 : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O2
============================
 exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
 < search.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown K evalStmt> T Names'
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < apply names_is to _ Ev1.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown K evalStmt> T Names'
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < apply proj_stmt_is to Ev2 _ _.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown K evalStmt> T Names'
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_stmt S_P
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Trans: case Trans.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N S_P1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_stmt S_P
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1
Trans2 : transS Names S_P1 T Names'
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_stmt S_P
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < apply IH_S to _ _ _ _ _ _ RFE SS _ Trans2 Ev3.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_stmt S_P
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H3 : evalStmt FE_T EE_T T EE_T' O_P
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N EE_T' EE''
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_stmt S_P
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H3 : evalStmt FE_T EE_T T EE_T' O_P
Ev' : evalStmt FE (Scope::EE) S_P EE'' O
Ev'1 : scopes_same EE' EE''
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O
 < apply evalStmt_unique to _ _ _ Ev' Ev3.

Subgoal 5.2.15:

Variables: T Names Names' Scope EE EE_T FE FE_T EE' Names1 S_P EE_P O_P N EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsS : is_stmt <unknown K evalStmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @
Ev1 : names (Scope::EE) Names1
Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P
Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P *
H1 : is_list is_string Names1
H2 : is_stmt S_P
Trans : join Names N
Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P
Trans2 : transS Names S_P T Names'
H3 : evalStmt FE_T EE_T T EE_T' O_P
Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P
Ev'1 : scopes_same EE' EE_P
============================
 exists EE_T', evalStmt FE_T EE_T T EE_T' O_P
 < search.

Subgoal 5.3.1:

Variables: T Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transA Names nilArgs T
Ev : evalArgs FE EE' nilArgs [] EE' [] @
============================
 exists EE_T', evalArgs FE_T EE_T T [] EE_T' []
 < case Trans.

Subgoal 5.3.1:

Variables: Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalArgs FE EE' nilArgs [] EE' [] @
============================
 exists EE_T', evalArgs FE_T EE_T nilArgs [] EE_T' []
 < search.

Subgoal 5.3.2:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsA : is_args (consArgs E Rest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalArgs FE_T EE_T T (V1::VRest) EE_T' O
 < case IsA.

Subgoal 5.3.2:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E Rest) T
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
============================
 exists EE_T', evalArgs FE_T EE_T T (V1::VRest) EE_T' O
 < Trans: case Trans.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < EvB2: apply IH_A to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.3.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalArgs FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_expr E
H2 : is_args Rest
Trans : transE Names E E2
Trans1 : transA Names Rest A2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H3 : scopes_same EE3 EE_T'
H4 : ctx_names EE3 Names
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_expr E2
H7 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalArgs FE_T EE_T' A2 VRest EE_T'1 O3
============================
 exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
 < search.

Subgoal 5.3.3:

Variables: T Names EE EE_T FE FE_T V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsA : is_args <unknown K evalArgs>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
============================
 exists EE_T', evalArgs FE_T EE_T T V EE_T' O
 < Or: apply is_args_nilArgs_or_consArgs to IsA.

Subgoal 5.3.3:

Variables: T Names EE EE_T FE FE_T V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsA : is_args <unknown K evalArgs>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names <unknown K evalArgs> T
Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @
Or : <unknown K evalArgs> = nilArgs \/
     (exists E A', <unknown K evalArgs> = consArgs E A')
============================
 exists EE_T', evalArgs FE_T EE_T T V EE_T' O
 < case Or.

Subgoal 5.4.1:

Variables: T Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Trans : transRF Names nilRecFieldExprs T
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
============================
 exists EE_T', evalRecFields FE_T EE_T T [] EE_T' []
 < case Trans.

Subgoal 5.4.1:

Variables: Names EE_T FE FE_T EE'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE'
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE' EE_T
Ctxs : ctx_names EE' Names
Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @
============================
 exists EE_T', evalRecFields FE_T EE_T nilRecFieldExprs [] EE_T' []
 < search.

Subgoal 5.4.2:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsRF : is_recFieldExprs (consRecFieldExprs F E Rest)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
============================
 exists EE_T', evalRecFields FE_T EE_T T ((F, V1)::VRest) EE_T' O
 < case IsRF.

Subgoal 5.4.2:

Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E Rest) T
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
============================
 exists EE_T', evalRecFields FE_T EE_T T ((F, V1)::VRest) EE_T' O
 < Trans: case Trans.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H4 : scopes_same EE3 EE_T'
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H4 : scopes_same EE3 EE_T'
H5 : ctx_names EE3 Names
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < apply evalExpr_isCtx to _ _ _ Ev1.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H4 : scopes_same EE3 EE_T'
H5 : ctx_names EE3 Names
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < apply transE_is to _ _ Trans.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H4 : scopes_same EE3 EE_T'
H5 : ctx_names EE3 Names
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_expr E2
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < apply evalExpr_isCtx to _ _ _ EvB1.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T'
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H4 : scopes_same EE3 EE_T'
H5 : ctx_names EE3 Names
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_expr E2
H8 : is_list (is_list (is_pair is_string is_value)) EE_T'
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < EvB2: apply IH_RF to _ _ _ _ _ _ RFE _ _ Trans1 Ev2.

Subgoal 5.4.2:

Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' EE_T'1
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @
Ev1 : evalExpr FE EE E V1 EE3 O2 *
Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 *
Ev3 : O2 ++ O3 = O
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs Rest
Trans : transE Names E E2
Trans1 : transRF Names Rest RF2
EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2
H4 : scopes_same EE3 EE_T'
H5 : ctx_names EE3 Names
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_expr E2
H8 : is_list (is_list (is_pair is_string is_value)) EE_T'
EvB2 : evalRecFields FE_T EE_T' RF2 VRest EE_T'1 O3
============================
 exists EE_T',
   evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
 < search.

Subgoal 5.4.3:

Variables: T Names EE EE_T FE FE_T V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
============================
 exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
 < Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF.

Subgoal 5.4.3:

Variables: T Names EE EE_T FE FE_T V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * ->
         exists EE_T', evalExpr FE_T EE_T T V EE_T' O
IH_S : forall S T Names Names' Scope EE EE_T FE FE_T 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T ->
         ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * ->
         exists EE_T', evalStmt FE_T EE_T T EE_T' O
IH_A : forall A T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
         ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * ->
         exists EE_T', evalArgs FE_T EE_T T V EE_T' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T ->
          ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * ->
          exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
IsRF : is_recFieldExprs <unknown K evalRecFields>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names <unknown K evalRecFields> T
Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @
Or : <unknown K evalRecFields> = nilRecFieldExprs \/
     (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF')
============================
 exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
 < case Or.

Proof completed.
 < Extensible_Theorem
      trans_getFunEvalInfo_forward : forall F F_T Name RetVar RVVal PNames Body,
         IsF : is_fun F ->
         Trans : transF F F_T ->
         GFEI : getFunEvalInfo F Name RetVar RVVal PNames Body ->
         exists Body_T,
           getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
      on Trans.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body1)
Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @
GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar1::Names] Body1 Body2 Names1
============================
 exists Body_T,
   getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
 < case IsF.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @
GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar1::Names] Body1 Body2 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar1
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body1
============================
 exists Body_T,
   getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
 < Trans: case Trans.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 PTys1 Names2 Names3
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar1::Names] Body1 Body2 Names1
H1 : is_string F1
H2 : is_typ RetTy
H3 : is_string RetVar1
H4 : is_value InitVal
H5 : is_list is_param Params
H6 : is_stmt Body1
Trans : paramTys Params PTys1
Trans4 : domain PTys1 Names2
Trans5 : transS [RetVar1::Names2] Body1 Body2 Names3
============================
 exists Body_T,
   getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
 < case GFEI.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params RetTy PTys1 Names2 Names3
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body2 Names1
H1 : is_string Name
H2 : is_typ RetTy
H3 : is_string RetVar
H4 : is_value RVVal
H5 : is_list is_param Params
H6 : is_stmt Body
Trans : paramTys Params PTys1
Trans4 : domain PTys1 Names2
Trans5 : transS [RetVar::Names2] Body Body2 Names3
H7 : paramNames Params PNames
============================
 exists Body_T,
   getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body2) Name RetVar RVVal PNames Body_T
 < search.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body F_P
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
============================
 exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
 < G: apply proj_getFunEvalInfo_forward to Trans1 _ GFEI.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body F_P
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
G : getFunEvalInfo F_P Name RetVar RVVal PNames Body
============================
 exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
 < apply proj_fun_is to Trans1 _.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body F_P
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
G : getFunEvalInfo F_P Name RetVar RVVal PNames Body
H1 : is_fun F_P
============================
 exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
 < apply IH to _ Trans2 G.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body F_P Body_T
IH : forall F F_T Name RetVar RVVal PNames Body,
       is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body ->
       exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
G : getFunEvalInfo F_P Name RetVar RVVal PNames Body
H1 : is_fun F_P
H2 : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
============================
 exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
 < search.

Proof completed.
 < Theorem trans_getFunEvalCtx_forward :
     forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T.

============================
 forall Fs Fs_T FE,
   is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> exists FE_T,
     getFunEvalCtx Fs_T FE_T
 < induction on 2.

IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
============================
 forall Fs Fs_T FE,
   is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs FE -> exists FE_T,
     getFunEvalCtx Fs_T FE_T
 < intros IsFs Trans GFEI.

Variables: Fs Fs_T FE
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
IsFs : is_list is_fun Fs
Trans : transFuns Fs Fs_T @
GFEI : getFunEvalCtx Fs FE
============================
 exists FE_T, getFunEvalCtx Fs_T FE_T
 < Trans: case Trans.

Subgoal 1:

Variables: FE
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
IsFs : is_list is_fun []
GFEI : getFunEvalCtx [] FE
============================
 exists FE_T, getFunEvalCtx [] FE_T
 < case GFEI.

Subgoal 1:

IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
IsFs : is_list is_fun []
============================
 exists FE_T, getFunEvalCtx [] FE_T
 < search.

Subgoal 2:

Variables: FE Rest1 F1 Rest F
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
IsFs : is_list is_fun (F::Rest)
GFEI : getFunEvalCtx (F::Rest) FE
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
============================
 exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
 < case IsFs.

Subgoal 2:

Variables: FE Rest1 F1 Rest F
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
GFEI : getFunEvalCtx (F::Rest) FE
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
============================
 exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
 < G: case GFEI.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
G : getFunEvalInfo F FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest CRest
============================
 exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
 < apply IH to _ Trans1 G1.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE_T
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
G : getFunEvalInfo F FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest CRest
H3 : getFunEvalCtx Rest1 FE_T
============================
 exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
 < apply trans_getFunEvalInfo_forward to _ Trans G.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE_T Body_T
IH : forall Fs Fs_T FE,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T,
         getFunEvalCtx Fs_T FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
G : getFunEvalInfo F FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest CRest
H3 : getFunEvalCtx Rest1 FE_T
H4 : getFunEvalInfo F1 FName RetVar RVVal PNames Body_T
============================
 exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalProgram_forward : forall P P_T A O,
         IsP : is_program P ->
         IsA : is_list is_value A ->
         Trans : transP P P_T ->
         Ev : evalProgram A P O ->
         evalProgram A P_T O
      on Trans.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsP : is_program (program Funs Main)
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Ev : evalProgram A (program Funs Main) O
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
============================
 evalProgram A (program Funs1 Main1) O
 < case IsP.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Ev : evalProgram A (program Funs Main) O
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 evalProgram A (program Funs1 Main1) O
 < Ev: case Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
============================
 evalProgram A (program Funs1 Main1) O
 < G: apply trans_getFunEvalCtx_forward to _ Trans1 Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
============================
 evalProgram A (program Funs1 Main1) O
 < GM: apply trans_getFunEvalInfo_forward to _ Trans2 Ev1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
============================
 evalProgram A (program Funs1 Main1) O
 < RFE: apply trans_getFunEvalCtx_rel_FE to _ Trans1 Ev G.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
============================
 evalProgram A (program Funs1 Main1) O
 < Tr: apply trans_getFunEvalInfo_rel to _ Trans2 Ev1 GM.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
============================
 evalProgram A (program Funs1 Main1) O
 < RFE': assert rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T).

Subgoal 1.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
============================
 rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
 < unfold .

Subgoal 1.1.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
============================
 forall F RetVar1 RVVal PNames1 Body1,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) ->
   exists Body_T1 Names,
     lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\
     transS [RetVar1::PNames1] Body1 Body_T1 Names
 < intros L.

Subgoal 1.1.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1)))
============================
 exists Body_T1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < L: case L.

Subgoal 1.1.1.1:

Variables: A O Main1 Funs1 Main Funs FCtx InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body1
Ev2 : zip PNames1 A InitEnv
Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body1))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body1 EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar1::PNames1] Body1 Body_T N
============================
 exists Body_T1 Names,
   lookup ((F, (RetVar1, (RVVal, (PNames1, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < search.

Subgoal 1.1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
L : MainName = F -> false
L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1)))
============================
 exists Body_T1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < R: case RFE.

Subgoal 1.1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
Tr : transS [RetVar::PNames] Body Body_T N
L : MainName = F -> false
L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1)))
R : forall F RetVar RVVal PNames Body,
      lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists Body_T1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < apply R to L1.

Subgoal 1.1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 Body_T1 Names
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
Tr : transS [RetVar::PNames] Body Body_T N
L : MainName = F -> false
L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1)))
R : forall F RetVar RVVal PNames Body,
      lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
H3 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1)))
H4 : transS [RetVar1::PNames1] Body1 Body_T1 Names
============================
 exists Body_T1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < search.

Subgoal 1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
============================
 forall F RetVar1 RVVal PNames1 Body_T1,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) ->
   exists Body1 Names,
     lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\
     transS [RetVar1::PNames1] Body1 Body_T1 Names
 < intros L.

Subgoal 1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1)))
============================
 exists Body1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < L: case L.

Subgoal 1.1.2.1:

Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE_T N F RetVar1 RVVal PNames1 Body_T1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body
Ev2 : zip PNames1 A InitEnv
Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T1
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar1::PNames1] Body Body_T1 N
============================
 exists Body1 Names,
   lookup ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < search.

Subgoal 1.1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
L : MainName = F -> false
L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1)))
============================
 exists Body1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < R: case RFE.

Subgoal 1.1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
Tr : transS [RetVar::PNames] Body Body_T N
L : MainName = F -> false
L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1)))
R : forall F RetVar RVVal PNames Body,
      lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists Body1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < apply R1 to L1.

Subgoal 1.1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 Body1 Names
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
Tr : transS [RetVar::PNames] Body Body_T N
L : MainName = F -> false
L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1)))
R : forall F RetVar RVVal PNames Body,
      lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
H3 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1)))
H4 : transS [RetVar1::PNames1] Body1 Body_T1 Names
============================
 exists Body1 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\
   transS [RetVar1::PNames1] Body1 Body_T1 Names
 < search.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
============================
 evalProgram A (program Funs1 Main1) O
 < Is: apply getFunEvalInfo_is to _ Ev1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
============================
 evalProgram A (program Funs1 Main1) O
 < apply zip_is to _ _ Ev2.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
============================
 evalProgram A (program Funs1 Main1) O
 < IsIE: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv].

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
============================
 evalProgram A (program Funs1 Main1) O
 < SS: apply scopes_same_reflexive to IsIE.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
============================
 evalProgram A (program Funs1 Main1) O
 < Z: assert zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv).

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
============================
 evalProgram A (program Funs1 Main1) O
 < apply zip_ctx_names to Z.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
============================
 evalProgram A (program Funs1 Main1) O
 < apply getFunEvalCtx_is to _ Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
============================
 evalProgram A (program Funs1 Main1) O
 < apply transFuns_is to _ Trans1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
H6 : is_list is_fun Funs1
============================
 evalProgram A (program Funs1 Main1) O
 < apply getFunEvalCtx_is to _ G.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
H6 : is_list is_fun Funs1
H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
============================
 evalProgram A (program Funs1 Main1) O
 < apply transF_is to _ Trans2.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
H6 : is_list is_fun Funs1
H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
H8 : is_fun Main1
============================
 evalProgram A (program Funs1 Main1) O
 < apply getFunEvalInfo_is to _ GM.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
H6 : is_list is_fun Funs1
H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
H8 : is_fun Main1
H9 : is_string MainName
H10 : is_string RetVar
H11 : is_value RetVal
H12 : is_list is_string PNames
H13 : is_stmt Body_T
============================
 evalProgram A (program Funs1 Main1) O
 < apply trans_evalStmt_forward to _ _ _ _ _ _ RFE' SS _ Tr Ev3.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N EE_T'
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs FCtx
Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
G : getFunEvalCtx Funs1 FE_T
GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T
RFE : rel_FE FCtx FE_T
Tr : transS [RetVar::PNames] Body Body_T N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
Is : is_string MainName
Is1 : is_string RetVar
Is2 : is_value RetVal
Is3 : is_list is_string PNames
Is4 : is_stmt Body
H3 : is_list (is_pair is_string is_value) InitEnv
IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
H6 : is_list is_fun Funs1
H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
H8 : is_fun Main1
H9 : is_string MainName
H10 : is_string RetVar
H11 : is_value RetVal
H12 : is_list is_string PNames
H13 : is_stmt Body_T
H14 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) [(RetVar, RetVal)::InitEnv] Body_T EE_T' O
============================
 evalProgram A (program Funs1 Main1) O
 < search.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A <unknown I program> O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
============================
 evalProgram A P_T O
 < Ev': apply proj_evalProgram_forward to Trans1 _ _ Ev.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A <unknown I program> O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
Ev' : evalProgram A P_P O
============================
 evalProgram A P_T O
 < apply proj_program_is to Trans1 _.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A <unknown I program> O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
Ev' : evalProgram A P_P O
H1 : is_program P_P
============================
 evalProgram A P_T O
 < apply IH to _ _ Trans2 Ev'.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O ->
       evalProgram A P_T O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A <unknown I program> O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
Ev' : evalProgram A P_P O
H1 : is_program P_P
H2 : evalProgram A P_T O
============================
 evalProgram A P_T O
 < search.

Proof completed.
 < Define emptyNames_FE :
             (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) ->
             prop by
   emptyNames_FE FE :=
     forall F RetVar RVVal Params Body,
       mem (F, RetVar, RVVal, Params, Body) FE -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames.


 < Theorem ctx_names_mems  [K, I] :
     forall (EE : list (list (pair K I))) NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA -> mems X NB.

============================
 forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA -> mems X NB
 < induction on 3.

IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
============================
 forall EE NA NB X,
   ctx_names EE NA -> ctx_names EE NB -> mems X NA @ -> mems X NB
 < intros CNA CNB M.

Variables: EE NA NB X
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
CNA : ctx_names EE NA
CNB : ctx_names EE NB
M : mems X NA @
============================
 mems X NB
 < M: case M.

Subgoal 1:

Variables: EE NB X Rest S
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
CNA : ctx_names EE (S::Rest)
CNB : ctx_names EE NB
M : mem X S
============================
 mems X NB
 < RA: case CNA.

Subgoal 1:

Variables: NB X Rest S ARest A
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
CNB : ctx_names (A::ARest) NB
M : mem X S
RA : forall K I, mem (K, I) A -> mem K S
RA1 : forall K, mem K S -> exists I, mem (K, I) A
RA2 : ctx_names ARest Rest
============================
 mems X NB
 < RB: case CNB.

Subgoal 1:

Variables: X Rest S ARest A BRest B
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
M : mem X S
RA : forall K I, mem (K, I) A -> mem K S
RA1 : forall K, mem K S -> exists I, mem (K, I) A
RA2 : ctx_names ARest Rest
RB : forall K I, mem (K, I) A -> mem K B
RB1 : forall K, mem K B -> exists I, mem (K, I) A
RB2 : ctx_names ARest BRest
============================
 mems X (B::BRest)
 < MA: apply RA1 to M.

Subgoal 1:

Variables: X Rest S ARest A BRest B I
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
M : mem X S
RA : forall K I, mem (K, I) A -> mem K S
RA1 : forall K, mem K S -> exists I, mem (K, I) A
RA2 : ctx_names ARest Rest
RB : forall K I, mem (K, I) A -> mem K B
RB1 : forall K, mem K B -> exists I, mem (K, I) A
RB2 : ctx_names ARest BRest
MA : mem (X, I) A
============================
 mems X (B::BRest)
 < apply RB to MA.

Subgoal 1:

Variables: X Rest S ARest A BRest B I
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
M : mem X S
RA : forall K I, mem (K, I) A -> mem K S
RA1 : forall K, mem K S -> exists I, mem (K, I) A
RA2 : ctx_names ARest Rest
RB : forall K I, mem (K, I) A -> mem K B
RB1 : forall K, mem K B -> exists I, mem (K, I) A
RB2 : ctx_names ARest BRest
MA : mem (X, I) A
H1 : mem X B
============================
 mems X (B::BRest)
 < search.

Subgoal 2:

Variables: EE NB X Rest S
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
CNA : ctx_names EE (S::Rest)
CNB : ctx_names EE NB
M : mems X Rest *
============================
 mems X NB
 < CNA: case CNA.

Subgoal 2:

Variables: NB X Rest S ARest A
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
CNB : ctx_names (A::ARest) NB
M : mems X Rest *
CNA : forall K I, mem (K, I) A -> mem K S
CNA1 : forall K, mem K S -> exists I, mem (K, I) A
CNA2 : ctx_names ARest Rest
============================
 mems X NB
 < CNB: case CNB.

Subgoal 2:

Variables: X Rest S ARest A BRest B
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
M : mems X Rest *
CNA : forall K I, mem (K, I) A -> mem K S
CNA1 : forall K, mem K S -> exists I, mem (K, I) A
CNA2 : ctx_names ARest Rest
CNB : forall K I, mem (K, I) A -> mem K B
CNB1 : forall K, mem K B -> exists I, mem (K, I) A
CNB2 : ctx_names ARest BRest
============================
 mems X (B::BRest)
 < apply IH to CNA2 CNB2 M.

Subgoal 2:

Variables: X Rest S ARest A BRest B
IH : forall EE NA NB X,
       ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB
M : mems X Rest *
CNA : forall K I, mem (K, I) A -> mem K S
CNA1 : forall K, mem K S -> exists I, mem (K, I) A
CNA2 : ctx_names ARest Rest
CNB : forall K I, mem (K, I) A -> mem K B
CNB1 : forall K, mem K B -> exists I, mem (K, I) A
CNB2 : ctx_names ARest BRest
H1 : mems X BRest
============================
 mems X (B::BRest)
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalExpr_backward : forall E T Names EE EE_T FE FE_T V EE_T' O,
         IsE : is_expr 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 ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         ENFE : emptyNames_FE FE ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transE Names E T ->
         EN : exprNames Names E [] ->
         Ev : evalExpr FE_T EE_T T V EE_T' O ->
         exists EE',
           evalExpr FE EE E V EE' O
      on Ev as IH_E_E, Trans * as IH_E,
      trans_evalStmt_backward : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O,
         IsS : is_stmt S ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         ENFE : emptyNames_FE FE ->
         SS : scopes_same (Scope::EE) EE_T ->
         Ctxs : ctx_names (Scope::EE) Names ->
         Trans : transS Names S T Names' ->
         SN : stmtNames Names S [] Names'' ->
         Ev : evalStmt FE_T EE_T T EE_T' O ->
         exists EE',
           evalStmt FE (Scope::EE) S EE' O
      on Ev as IH_S_E, Trans * as IH_Salso
   
      trans_evalArgs_backward : forall A T Names EE EE_T FE FE_T V EE_T' O,
         IsA : is_args A ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         ENFE : emptyNames_FE FE ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transA Names A T ->
         AN : argsNames Names A [] ->
         Ev : evalArgs FE_T EE_T T V EE_T' O ->
         exists EE',
           evalArgs FE EE A V EE' O
      on Ev as IH_A_E, Trans * as IH_A,
      trans_evalRecFields_backward : forall RF T Names EE EE_T FE FE_T V EE_T' O,
         IsRF : is_recFieldExprs RF ->
         IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ->
         IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         IsEE : is_list (is_list (is_pair is_string is_value)) EE ->
         IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T ->
         IsNames : is_list (is_list is_string) Names ->
         RFE : rel_FE FE FE_T ->
         ENFE : emptyNames_FE FE ->
         SS : scopes_same EE EE_T ->
         Ctxs : ctx_names EE Names ->
         Trans : transRF Names RF T ->
         RFN : recFieldNames Names RF [] ->
         Ev : evalRecFields FE_T EE_T T V EE_T' O ->
         exists EE',
           evalRecFields FE EE RF V EE' O
      on Ev as IH_RF_E, Trans * as IH_RF.

Subgoal 1.1:

Variables: Names EE EE_T FE FE_T V EE_T' O I
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (num I) (num I) @@
EN : exprNames Names (num I) []
Ev : evalExpr FE_T EE_T (num I) V EE_T' O @
============================
 exists EE', evalExpr FE EE (num I) V EE' O
 < case Ev.

Subgoal 1.1:

Variables: Names EE FE FE_T EE_T' I
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (num I)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transE Names (num I) (num I) @@
EN : exprNames Names (num I) []
============================
 exists EE', evalExpr FE EE (num I) (intVal I) EE' []
 < search.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (plus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
EN : exprNames Names (plus E1 E2) []
Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (plus E1 E2) V EE' O
 < case IsE.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
EN : exprNames Names (plus E1 E2) []
Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (plus E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (plus E1 E2) V EE' O
 < case EN2.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (plus E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (plus E1 E2) (plus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 + I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3
============================
 exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
 < search.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (minus E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
EN : exprNames Names (minus E1 E2) []
Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (minus E1 E2) V EE' O
 < case IsE.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
EN : exprNames Names (minus E1 E2) []
Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (minus E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (minus E1 E2) V EE' O
 < case EN2.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (minus E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (minus E1 E2) (minus E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 - I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3
============================
 exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
 < search.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (mult E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
EN : exprNames Names (mult E1 E2) []
Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (mult E1 E2) V EE' O
 < case IsE.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
EN : exprNames Names (mult E1 E2) []
Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (mult E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (mult E1 E2) V EE' O
 < case EN2.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (mult E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.4:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (mult E1 E2) (mult E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 * I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3
============================
 exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
 < search.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (div E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
EN : exprNames Names (div E1 E2) []
Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (div E1 E2) V EE' O
 < case IsE.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
EN : exprNames Names (div E1 E2) []
Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (div E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (div E1 E2) V EE' O
 < case EN2.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (div E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.5:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (div E1 E2) (div E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 / I2 = I
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3
============================
 exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
 < search.

Subgoal 1.6:

Variables: Names EE EE_T FE FE_T V EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names true true @@
EN : exprNames Names true []
Ev : evalExpr FE_T EE_T true V EE_T' O @
============================
 exists EE', evalExpr FE EE true V EE' O
 < case Ev.

Subgoal 1.6:

Variables: Names EE FE FE_T EE_T'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr true
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transE Names true true @@
EN : exprNames Names true []
============================
 exists EE', evalExpr FE EE true trueVal EE' []
 < search.

Subgoal 1.7:

Variables: Names EE EE_T FE FE_T V EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names false false @@
EN : exprNames Names false []
Ev : evalExpr FE_T EE_T false V EE_T' O @
============================
 exists EE', evalExpr FE EE false V EE' O
 < case Ev.

Subgoal 1.7:

Variables: Names EE FE FE_T EE_T'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr false
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transE Names false false @@
EN : exprNames Names false []
============================
 exists EE', evalExpr FE EE false falseVal EE' []
 < search.

Subgoal 1.8:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (and E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
EN : exprNames Names (and E1 E2) []
Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (and E1 E2) V EE' O
 < case IsE.

Subgoal 1.8:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
EN : exprNames Names (and E1 E2) []
Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (and E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.8:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (and E1 E2) V EE' O
 < case EN2.

Subgoal 1.8:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (and E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.8.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 trueVal EE'1 O3
============================
 exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
 < search.

Subgoal 1.8.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE_T' O *
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.8.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE_T' O *
H3 : evalExpr FE EE E1 falseVal EE' O
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < search.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.8.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (and E1 E2) (and E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 trueVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 falseVal EE'1 O3
============================
 exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
 < search.

Subgoal 1.9:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (or E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
EN : exprNames Names (or E1 E2) []
Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (or E1 E2) V EE' O
 < case IsE.

Subgoal 1.9:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
EN : exprNames Names (or E1 E2) []
Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (or E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.9:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (or E1 E2) V EE' O
 < case EN2.

Subgoal 1.9:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (or E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.9.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE_T' O *
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.9.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 trueVal EE_T' O *
H3 : evalExpr FE EE E1 trueVal EE' O
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < search.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.9.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 trueVal EE'1 O3
============================
 exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
 < search.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.9.3:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (or E1 E2) (or E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 falseVal EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 falseVal EE'1 O3
============================
 exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
 < search.

Subgoal 1.10:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (not 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
EN : exprNames Names (not E1) []
Ev : evalExpr FE_T EE_T (not E2) V EE_T' O @
Trans1 : transE Names E1 E2 **
============================
 exists EE', evalExpr FE EE (not E1) V EE' O
 < case IsE.

Subgoal 1.10:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
EN : exprNames Names (not E1) []
Ev : evalExpr FE_T EE_T (not E2) V EE_T' O @
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
============================
 exists EE', evalExpr FE EE (not E1) V EE' O
 < EN: case EN.

Subgoal 1.10:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
Ev : evalExpr FE_T EE_T (not E2) V EE_T' O @
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
EN : exprNames Names E1 []
============================
 exists EE', evalExpr FE EE (not E1) V EE' O
 < Ev: case Ev.

Subgoal 1.10.1:

Variables: Names EE EE_T FE FE_T EE_T' O E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
EN : exprNames Names E1 []
Ev : evalExpr FE_T EE_T E2 falseVal EE_T' O *
============================
 exists EE', evalExpr FE EE (not E1) trueVal EE' O
 < apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.10.1:

Variables: Names EE EE_T FE FE_T EE_T' O E2 E1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
EN : exprNames Names E1 []
Ev : evalExpr FE_T EE_T E2 falseVal EE_T' O *
H2 : evalExpr FE EE E1 falseVal EE' O
============================
 exists EE', evalExpr FE EE (not E1) trueVal EE' O
 < search.

Subgoal 1.10.2:

Variables: Names EE EE_T FE FE_T EE_T' O E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
EN : exprNames Names E1 []
Ev : evalExpr FE_T EE_T E2 trueVal EE_T' O *
============================
 exists EE', evalExpr FE EE (not E1) falseVal EE' O
 < apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.10.2:

Variables: Names EE EE_T FE FE_T EE_T' O E2 E1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (not E1) (not E2) @@
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
EN : exprNames Names E1 []
Ev : evalExpr FE_T EE_T E2 trueVal EE_T' O *
H2 : evalExpr FE EE E1 trueVal EE' O
============================
 exists EE', evalExpr FE EE (not E1) falseVal EE' O
 < search.

Subgoal 1.11:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (greater E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
EN : exprNames Names (greater E1 E2) []
Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (greater E1 E2) V EE' O
 < case IsE.

Subgoal 1.11:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
EN : exprNames Names (greater E1 E2) []
Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (greater E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.11:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (greater E1 E2) V EE' O
 < case EN2.

Subgoal 1.11:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (greater E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.11.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 > I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3
============================
 exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
 < search.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.11.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (greater E1 E2) (greater E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 *
Ev2 : I1 <= I2
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3
============================
 exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
 < search.

Subgoal 1.12:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (eq E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
EN : exprNames Names (eq E1 E2) []
Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (eq E1 E2) V EE' O
 < case IsE.

Subgoal 1.12:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
EN : exprNames Names (eq E1 E2) []
Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (eq E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.12:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (eq E1 E2) V EE' O
 < case EN2.

Subgoal 1.12:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (eq E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.12.1:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 V1 EE'1 O3
============================
 exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
 < search.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.12.2:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (eq E1 E2) (eq E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 *
Ev2 : V1 = V2 -> false
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 V1 EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 V2 EE'1 O3
============================
 exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
 < search.

Subgoal 1.13:

Variables: Names EE EE_T FE FE_T V EE_T' O S
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stringLit S) (stringLit S) @@
EN : exprNames Names (stringLit S) []
Ev : evalExpr FE_T EE_T (stringLit S) V EE_T' O @
============================
 exists EE', evalExpr FE EE (stringLit S) V EE' O
 < case Ev.

Subgoal 1.13:

Variables: Names EE FE FE_T EE_T' S
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (stringLit S)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transE Names (stringLit S) (stringLit S) @@
EN : exprNames Names (stringLit S) []
============================
 exists EE', evalExpr FE EE (stringLit S) (stringVal S) EE' []
 < search.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (appString E1 E2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
EN : exprNames Names (appString E1 E2) []
Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
============================
 exists EE', evalExpr FE EE (appString E1 E2) V EE' O
 < case IsE.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
EN : exprNames Names (appString E1 E2) []
Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
============================
 exists EE', evalExpr FE EE (appString E1 E2) V EE' O
 < EN: case EN.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 N1
EN1 : exprNames Names E2 N2
EN2 : N1 ++ N2 = []
============================
 exists EE', evalExpr FE EE (appString E1 E2) V EE' O
 < case EN2.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
============================
 exists EE', evalExpr FE EE (appString E1 E2) V EE' O
 < Ev: case Ev.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
SS' : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 1.14:

Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (appString E1 E2) (appString E11 E21) @@
Trans1 : transE Names E1 E11 **
Trans2 : transE Names E2 E21 **
H1 : is_expr E1
H2 : is_expr E2
EN : exprNames Names E1 []
EN1 : exprNames Names E2 []
Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 *
Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 *
Ev2 : S1 ++ S2 = S
Ev3 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2
SS' : scopes_same EE' EE3
H3 : ctx_names EE' Names
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E11
H6 : is_list (is_list (is_pair is_string is_value)) EE3
EvA2 : evalExpr FE EE' E2 (stringVal S2) EE'1 O3
============================
 exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
 < search.

Subgoal 1.15:

Variables: Names EE EE_T FE FE_T V EE_T' O X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (name X)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (name X) (name X) @@
EN : exprNames Names (name X) []
Ev : evalExpr FE_T EE_T (name X) V EE_T' O @
============================
 exists EE', evalExpr FE EE (name X) V EE' O
 < case IsE.

Subgoal 1.15:

Variables: Names EE EE_T FE FE_T V EE_T' O X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (name X) (name X) @@
EN : exprNames Names (name X) []
Ev : evalExpr FE_T EE_T (name X) V EE_T' O @
H1 : is_string X
============================
 exists EE', evalExpr FE EE (name X) V EE' O
 < SS': apply scopes_same_symm to SS.

Subgoal 1.15:

Variables: Names EE EE_T FE FE_T V EE_T' O X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (name X) (name X) @@
EN : exprNames Names (name X) []
Ev : evalExpr FE_T EE_T (name X) V EE_T' O @
H1 : is_string X
SS' : scopes_same EE_T EE
============================
 exists EE', evalExpr FE EE (name X) V EE' O
 < Ev: case Ev.

Subgoal 1.15:

Variables: Names EE FE FE_T V EE_T' X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transE Names (name X) (name X) @@
EN : exprNames Names (name X) []
H1 : is_string X
SS' : scopes_same EE_T' EE
Ev : lookupScopes X EE_T' V
============================
 exists EE', evalExpr FE EE (name X) V EE' []
 < apply scopes_same_lookupScopes_exists to _ _ SS' Ev.

Subgoal 1.15:

Variables: Names EE FE FE_T V EE_T' X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transE Names (name X) (name X) @@
EN : exprNames Names (name X) []
H1 : is_string X
SS' : scopes_same EE_T' EE
Ev : lookupScopes X EE_T' V
H2 : lookupScopes X EE V
============================
 exists EE', evalExpr FE EE (name X) V EE' []
 < search.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (call F A)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
EN : exprNames Names (call F A) []
Ev : evalExpr FE_T EE_T (call F A1) V EE_T' O @
Trans1 : transA Names A A1 **
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < case IsE.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
EN : exprNames Names (call F A) []
Ev : evalExpr FE_T EE_T (call F A1) V EE_T' O @
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < EN: case EN.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Ev : evalExpr FE_T EE_T (call F A1) V EE_T' O @
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < Ev: case Ev.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < R: case RFE (keep).

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < LF: apply R1 to Ev.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < clear R
   R1.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < EvA1: apply IH_A to _ _ _ _ _ _ RFE _ SS _ Trans1 _ Ev1.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv).

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < apply zip_ctx_names to Z.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < apply evalArgs_isValue to _ _ _ EvA1.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < IsP: apply lookup_is_value_funCtx to _ LF.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body1)))
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < IsP: case IsP.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body1))
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < IsP: case IsP1.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body1)
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < IsP: case IsP2.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < IsInitEnv: apply zip_is to _ _ Z.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < SS1: apply scopes_same_reflexive to _ with
          L = [(RetVar, RVVal)::InitEnv].

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < ENFE: case ENFE.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < MF: apply lookup_mem to LF.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < SN: apply ENFE to MF.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < EvA2: apply IH_S_E to _ _ _ _ _ _ RFE _ SS1 _ LF1 _ Ev3.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < SS2: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ LF1 EvA2 Ev3.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
SS2 : scopes_same EE'1 EE3
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < SS2': apply scopes_same_symm to SS2.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
SS2 : scopes_same EE'1 EE3
SS2' : scopes_same EE3 EE'1
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < apply transS_is to _ _ LF1.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
SS2 : scopes_same EE'1 EE3
SS2' : scopes_same EE3 EE'1
H5 : is_stmt Body
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < apply evalStmt_isCtx to _ _ _ Ev3.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
SS2 : scopes_same EE'1 EE3
SS2' : scopes_same EE3 EE'1
H5 : is_stmt Body
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
SS2 : scopes_same EE'1 EE3
SS2' : scopes_same EE3 EE'1
H5 : is_stmt Body
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE'1
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < apply scopes_same_lookupScopes_exists to _ _ SS2' Ev5.

Subgoal 1.16:

Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (call F A) (call F A1) @@
Trans1 : transA Names A A1 **
H1 : is_string F
H2 : is_args A
EN : argsNames Names A []
Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body)))
Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 *
Ev2 : zip ArgNames ArgVals InitEnv
Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 *
Ev4 : O2 ++ O3 = O
Ev5 : lookupScopes RetVar EE3 V
LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1)))
LF1 : transS [RetVar::ArgNames] Body1 Body Names1
EvA1 : evalArgs FE EE A ArgVals EE' O2
Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv)
H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames]
H4 : is_list is_value ArgVals
IsP : is_string RetVar
IsP1 : is_value RVVal
IsP2 : is_list is_string ArgNames
IsP3 : is_stmt Body1
IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv)
SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv]
ENFE : forall F RetVar RVVal Params Body,
         mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
           stmtNames [RetVar::Params] Body [] EndNames
MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE
SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames
EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3
SS2 : scopes_same EE'1 EE3
SS2' : scopes_same EE3 EE'1
H5 : is_stmt Body
H6 : is_list (is_list (is_pair is_string is_value)) EE3
H7 : is_list (is_list (is_pair is_string is_value)) EE'1
H8 : lookupScopes RetVar EE'1 V
============================
 exists EE', evalExpr FE EE (call F A) V EE' O
 < search.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (stmtExpr S 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
EN : exprNames Names (stmtExpr S E1) []
Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < case IsE.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
EN : exprNames Names (stmtExpr S E1) []
Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < EN: case EN.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S NS CtxS NE
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S NS CtxS
EN1 : exprNames CtxS E1 NE
EN2 : NS ++ NE = []
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < case EN2.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < Ev: case Ev.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < SS': apply scopes_same_add_scope to SS.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < C': apply ctx_names_add_scope to Ctxs.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < EvA1: apply IH_S to _ _ _ _ _ _ RFE _ SS' C' Trans1 _ Ev.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < SS2: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < C2: apply evalStmt_trans_ctx_names to _ _ _ _ C' Trans1 EvA1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < apply transS_is to _ _ Trans1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < apply transS_isNames to _ _ Trans1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < apply evalStmt_isCtx to _ _ _ Ev.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < C2': apply evalStmt_ctx_names to _ _ _ _ _ EN EvA1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < apply stmtNames_isCtx to _ _ EN.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < assert exprNames Names2 E1 [].

Subgoal 1.17.1:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
============================
 exprNames Names2 E1 []
 < apply exprNames_relatedCtxs to _ _ _ _ _ EN1 with
     CtxB = Names2.

Subgoal 1.17.1.1:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
============================
 forall X, mems X Names2 -> mems X CtxS
 < intros M.

Subgoal 1.17.1.1:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
M : mems X Names2
============================
 mems X CtxS
 < apply ctx_names_mems to C2 C2' M.

Subgoal 1.17.1.1:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
M : mems X Names2
H8 : mems X CtxS
============================
 mems X CtxS
 < search.

Subgoal 1.17.1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
============================
 forall X, mems X CtxS -> mems X Names2
 < intros M.

Subgoal 1.17.1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
M : mems X CtxS
============================
 mems X Names2
 < apply ctx_names_mems to C2' C2 M.

Subgoal 1.17.1.2:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
M : mems X CtxS
H8 : mems X Names2
============================
 mems X Names2
 < search.

Subgoal 1.17.1:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames Names2 E1 []
============================
 exprNames Names2 E1 []
 < search.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames Names2 E1 []
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS2 C2 Trans2 _ Ev1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 Names2 **
Trans2 : transE Names2 E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' Names2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) Names2
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames Names2 E1 []
EvA2 : evalExpr FE EE' E1 V EE'1 O3
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < apply transS_old_scopes to _ _ Trans1.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' EE'1 Scope'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 (Scope'::Names) **
Trans2 : transE (Scope'::Names) E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S EE' O2
SS2 : scopes_same EE' EE3
C2 : ctx_names EE' (Scope'::Names)
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S1
H5 : is_list (is_list is_string) (Scope'::Names)
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names EE' CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames (Scope'::Names) E1 []
EvA2 : evalExpr FE EE' E1 V EE'1 O3
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < case C2 (keep).

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'1 Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 (Scope'::Names) **
Trans2 : transE (Scope'::Names) E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S (A::ARest) O2
SS2 : scopes_same (A::ARest) EE3
C2 : ctx_names (A::ARest) (Scope'::Names)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S1
H5 : is_list (is_list is_string) (Scope'::Names)
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names (A::ARest) CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames (Scope'::Names) E1 []
EvA2 : evalExpr FE (A::ARest) E1 V EE'1 O3
H9 : forall K I, mem (K, I) A -> mem K Scope'
H10 : forall K, mem K Scope' -> exists I, mem (K, I) A
H11 : ctx_names ARest Names
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < C3: apply evalExpr_trans_ctx_names to _ _ _ _ C2 Trans2 EvA2.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'1 Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 (Scope'::Names) **
Trans2 : transE (Scope'::Names) E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S (A::ARest) O2
SS2 : scopes_same (A::ARest) EE3
C2 : ctx_names (A::ARest) (Scope'::Names)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S1
H5 : is_list (is_list is_string) (Scope'::Names)
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names (A::ARest) CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames (Scope'::Names) E1 []
EvA2 : evalExpr FE (A::ARest) E1 V EE'1 O3
H9 : forall K I, mem (K, I) A -> mem K Scope'
H10 : forall K, mem K Scope' -> exists I, mem (K, I) A
H11 : ctx_names ARest Names
C3 : ctx_names EE'1 (Scope'::Names)
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < case C3.

Subgoal 1.17:

Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 Scope' ARest A ARest1 A1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@
Trans1 : transS ([]::Names) S S1 (Scope'::Names) **
Trans2 : transE (Scope'::Names) E1 E2 **
H1 : is_stmt S
H2 : is_expr E1
EN : stmtNames ([]::Names) S [] CtxS
EN1 : exprNames CtxS E1 []
Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 *
Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 *
Ev2 : O2 ++ O3 = O
SS' : scopes_same ([]::EE) ([]::EE_T)
C' : ctx_names ([]::EE) ([]::Names)
EvA1 : evalStmt FE ([]::EE) S (A::ARest) O2
SS2 : scopes_same (A::ARest) EE3
C2 : ctx_names (A::ARest) (Scope'::Names)
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S1
H5 : is_list (is_list is_string) (Scope'::Names)
H6 : is_list (is_list (is_pair is_string is_value)) EE3
C2' : ctx_names (A::ARest) CtxS
H7 : is_list (is_list is_string) CtxS
H8 : exprNames (Scope'::Names) E1 []
EvA2 : evalExpr FE (A::ARest) E1 V (A1::ARest1) O3
H9 : forall K I, mem (K, I) A -> mem K Scope'
H10 : forall K, mem K Scope' -> exists I, mem (K, I) A
H11 : ctx_names ARest Names
H12 : forall K I, mem (K, I) A1 -> mem K Scope'
H13 : forall K, mem K Scope' -> exists I, mem (K, I) A1
H14 : ctx_names ARest1 Names
============================
 exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
 < search.

Subgoal 1.18:

Variables: Names EE EE_T FE FE_T V EE_T' O RF1 RF
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (recBuild RF)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) (recBuild RF1) @@
EN : exprNames Names (recBuild RF) []
Ev : evalExpr FE_T EE_T (recBuild RF1) V EE_T' O @
Trans1 : transRF Names RF RF1 **
============================
 exists EE', evalExpr FE EE (recBuild RF) V EE' O
 < case IsE.

Subgoal 1.18:

Variables: Names EE EE_T FE FE_T V EE_T' O RF1 RF
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) (recBuild RF1) @@
EN : exprNames Names (recBuild RF) []
Ev : evalExpr FE_T EE_T (recBuild RF1) V EE_T' O @
Trans1 : transRF Names RF RF1 **
H1 : is_recFieldExprs RF
============================
 exists EE', evalExpr FE EE (recBuild RF) V EE' O
 < EN: case EN.

Subgoal 1.18:

Variables: Names EE EE_T FE FE_T V EE_T' O RF1 RF
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) (recBuild RF1) @@
Ev : evalExpr FE_T EE_T (recBuild RF1) V EE_T' O @
Trans1 : transRF Names RF RF1 **
H1 : is_recFieldExprs RF
EN : recFieldNames Names RF []
============================
 exists EE', evalExpr FE EE (recBuild RF) V EE' O
 < Ev: case Ev.

Subgoal 1.18:

Variables: Names EE EE_T FE FE_T EE_T' O RF1 RF VF
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) (recBuild RF1) @@
Trans1 : transRF Names RF RF1 **
H1 : is_recFieldExprs RF
EN : recFieldNames Names RF []
Ev : evalRecFields FE_T EE_T RF1 VF EE_T' O *
============================
 exists EE', evalExpr FE EE (recBuild RF) (recVal VF) EE' O
 < apply IH_RF to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.18:

Variables: Names EE EE_T FE FE_T EE_T' O RF1 RF VF EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recBuild RF) (recBuild RF1) @@
Trans1 : transRF Names RF RF1 **
H1 : is_recFieldExprs RF
EN : recFieldNames Names RF []
Ev : evalRecFields FE_T EE_T RF1 VF EE_T' O *
H2 : evalRecFields FE EE RF VF EE' O
============================
 exists EE', evalExpr FE EE (recBuild RF) (recVal VF) EE' O
 < search.

Subgoal 1.19:

Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (recFieldAccess E1 F)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@
EN : exprNames Names (recFieldAccess E1 F) []
Ev : evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O @
Trans1 : transE Names E1 E2 **
============================
 exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
 < case IsE.

Subgoal 1.19:

Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@
EN : exprNames Names (recFieldAccess E1 F) []
Ev : evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O @
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
H2 : is_string F
============================
 exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
 < EN: case EN.

Subgoal 1.19:

Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@
Ev : evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O @
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
H2 : is_string F
EN : exprNames Names E1 []
============================
 exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
 < Ev: case Ev.

Subgoal 1.19:

Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 Fields
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
H2 : is_string F
EN : exprNames Names E1 []
Ev : evalExpr FE_T EE_T E2 (recVal Fields) EE_T' O *
Ev1 : lookup Fields F V
============================
 exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
 < apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 1.19:

Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 Fields EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@
Trans1 : transE Names E1 E2 **
H1 : is_expr E1
H2 : is_string F
EN : exprNames Names E1 []
Ev : evalExpr FE_T EE_T E2 (recVal Fields) EE_T' O *
Ev1 : lookup Fields F V
H3 : evalExpr FE EE E1 (recVal Fields) EE' O
============================
 exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
 < search.

Subgoal 1.20:

Variables: Names EE EE_T FE FE_T V EE_T' O Ty E2 E1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr (errorExpr E1 Ty)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @@
EN : exprNames Names (errorExpr E1 Ty) []
Ev : evalExpr FE_T EE_T (errorExpr E2 Ty) V EE_T' O @
Trans1 : transE Names E1 E2 **
============================
 exists EE', evalExpr FE EE (errorExpr E1 Ty) V EE' O
 < case Ev.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < apply join_is to _ Trans1.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < IsE_P: apply proj_expr_is to Trans2 _ _.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < EN_P: apply exprNames_exists to IsE_P IsNames.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P N1
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < Eq: assert N1 = [].

Subgoal 1.21.1:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P N1
============================
 N1 = []
 < IsN1: apply exprNames_is to _ _ EN_P.

Subgoal 1.21.1:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P N1
IsN1 : is_list is_string N1
============================
 N1 = []
 < IsN1: case IsN1.

Subgoal 1.21.1.1:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P []
============================
 [] = []
 < search.

Subgoal 1.21.1.2:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P T1 H
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P (H::T1)
IsN1 : is_string H
IsN2 : is_list is_string T1
============================
 H::T1 = []
 < M': apply proj_exprNames to Trans2 _ _ _ EN EN_P _ with
         X = H.

Subgoal 1.21.1.2:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P T1 H
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P (H::T1)
IsN1 : is_string H
IsN2 : is_list is_string T1
M' : mem H []
============================
 H::T1 = []
 < case M'.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P N1
Eq : N1 = []
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < case Eq.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P []
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < EvP: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans3 _ Ev.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P []
EvP : evalExpr FE EE E_P V EE' O
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < Names: apply names_exists to IsEE.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P []
EvP : evalExpr FE EE E_P V EE' O
Names : names EE N2
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < IsN1: apply names_is to _ Names.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P []
EvP : evalExpr FE EE E_P V EE' O
Names : names EE N2
IsN1 : is_list is_string N2
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < Pr: apply proj_expr_other to Trans2 _ _ IsN1.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' N2 E''
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E_P
Trans3 : transE Names E_P T **
H1 : is_list is_string N
IsE_P : is_expr E_P
EN_P : exprNames Names E_P []
EvP : evalExpr FE EE E_P V EE' O
Names : names EE N2
IsN1 : is_list is_string N2
Pr : N2 |{expr}- <unknown I expr> ~~> E''
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < apply proj_expr_unique_ctx_names to _ _ _ _ _ _ Trans2 Pr.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N EE' N2 E''
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E''
Trans3 : transE Names E'' T **
H1 : is_list is_string N
IsE_P : is_expr E''
EN_P : exprNames Names E'' []
EvP : evalExpr FE EE E'' V EE' O
Names : names EE N2
IsN1 : is_list is_string N2
Pr : N2 |{expr}- <unknown I expr> ~~> E''
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < apply proj_evalExpr_backward to Pr Names _ _ _ _ Ctxs _ EvP.

Subgoal 1.21:

Variables: T Names EE EE_T FE FE_T V EE_T' O N EE' N2 E'' EE''
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsE : is_expr <unknown I expr>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transE Names <unknown I expr> T @@
EN : exprNames Names <unknown I expr> []
Ev : evalExpr FE_T EE_T T V EE_T' O @
Trans1 : join Names N
Trans2 : N |{expr}- <unknown I expr> ~~> E''
Trans3 : transE Names E'' T **
H1 : is_list is_string N
IsE_P : is_expr E''
EN_P : exprNames Names E'' []
EvP : evalExpr FE EE E'' V EE' O
Names : names EE N2
IsN1 : is_list is_string N2
Pr : N2 |{expr}- <unknown I expr> ~~> E''
H2 : evalExpr FE EE <unknown I expr> V EE'' O
H3 : scopes_same EE' EE''
============================
 exists EE', evalExpr FE EE <unknown I expr> V EE' O
 < search.

Subgoal 2.1:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' noop noop Names' @@
SN : stmtNames Names' noop [] Names''
Ev : evalStmt FE_T EE_T noop EE_T' O @
============================
 exists EE', evalStmt FE (Scope::EE) noop EE' O
 < case Ev.

Subgoal 2.1:

Variables: Names' Names'' Scope EE FE FE_T EE_T'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt noop
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T'
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' noop noop Names' @@
SN : stmtNames Names' noop [] Names''
============================
 exists EE', evalStmt FE (Scope::EE) noop EE' []
 < search.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (seq S1 S2)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
SN : stmtNames Names (seq S1 S2) [] Names''
Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < case IsS.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
SN : stmtNames Names (seq S1 S2) [] Names''
Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < SN: case SN.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 N1 Ctx1 N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 N1 Ctx1
SN1 : stmtNames Ctx1 S2 N2 Names''
SN2 : N1 ++ N2 = []
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < case SN2.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < Ev: case Ev.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < EvA1: apply IH_S to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply evalStmt_isCtx to _ _ _ EvA1.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply transS_is to _ _ Trans1.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply evalStmt_isCtx to _ _ _ Ev.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < SS': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < C': apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
C' : ctx_names EE' Names3
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply transS_isNames to _ _ Trans1.

Subgoal 2.2:

Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS Names S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames Names S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
C' : ctx_names EE' Names3
H6 : is_list (is_list is_string) Names3
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < case Ctxs (keep).

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' BRest B
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 Names3 **
Trans2 : transS Names3 S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
C' : ctx_names EE' Names3
H6 : is_list (is_list is_string) Names3
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply transS_old_scopes to _ _ Trans1.

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' BRest B Scope'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
C' : ctx_names EE' (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < case C' (keep).

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 Ctx1 EE3 O2 O3 BRest B Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] Ctx1
SN1 : stmtNames Ctx1 S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply stmtNames_keep_older to _ _ SN.

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < apply stmtNames_isCtx to _ _ SN.

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < C'': apply evalStmt_ctx_names to _ _ _ _ Ctxs SN EvA1.

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < SN2: apply stmtNames_relatedCtxs to _ _ _ _ _ SN1 with
          CtxB = BRest ScopeB = Scope'.

Subgoal 2.2.1:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
============================
 forall X, mems X (Scope'::BRest) -> mems X (Scope'1::BRest)
 < intros M.

Subgoal 2.2.1:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
M : mems X (Scope'::BRest)
============================
 mems X (Scope'1::BRest)
 < apply ctx_names_mems to C' C'' M.

Subgoal 2.2.1:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
M : mems X (Scope'::BRest)
H15 : mems X (Scope'1::BRest)
============================
 mems X (Scope'1::BRest)
 < search.

Subgoal 2.2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
============================
 forall X, mems X (Scope'1::BRest) -> mems X (Scope'::BRest)
 < intros M.

Subgoal 2.2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
M : mems X (Scope'1::BRest)
============================
 mems X (Scope'::BRest)
 < apply ctx_names_mems to C'' C' M.

Subgoal 2.2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
M : mems X (Scope'1::BRest)
H15 : mems X (Scope'::BRest)
============================
 mems X (Scope'::BRest)
 < search.

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 CtxB'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
SN2 : stmtNames (Scope'::BRest) S2 [] CtxB'
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS' C' Trans2 SN2 Ev1.

Subgoal 2.2:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 CtxB' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@
Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) **
Trans2 : transS (Scope'::BRest) S2 S21 Names' **
H1 : is_stmt S1
H2 : is_stmt S2
SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest)
SN1 : stmtNames (Scope'1::BRest) S2 [] Names''
Ev : evalStmt FE_T EE_T S11 EE3 O2 *
Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2
H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest)
H4 : is_stmt S11
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same (A::ARest) EE3
C' : ctx_names (A::ARest) (Scope'::BRest)
H6 : is_list (is_list is_string) (Scope'::BRest)
H7 : forall K I, mem (K, I) Scope -> mem K B
H8 : forall K, mem K B -> exists I, mem (K, I) Scope
H9 : ctx_names EE BRest
H10 : forall K I, mem (K, I) A -> mem K Scope'
H11 : forall K, mem K Scope' -> exists I, mem (K, I) A
H12 : ctx_names ARest BRest
H13 : forall X, mem X B -> mem X Scope'1
H14 : is_list (is_list is_string) (Scope'1::BRest)
C'' : ctx_names (A::ARest) (Scope'1::BRest)
SN2 : stmtNames (Scope'::BRest) S2 [] CtxB'
EvA2 : evalStmt FE (A::ARest) S2 EE'1 O3
============================
 exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
 < search.

Subgoal 2.3:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names1 Scope1 X E1 Ty E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (declare Ty X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
SN : stmtNames (Scope1::Names1) (declare Ty X E) [] Names''
Ev : evalStmt FE_T EE_T (declare Ty X E1) EE_T' O @
Trans1 : transE (Scope1::Names1) E E1 **
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < case IsS.

Subgoal 2.3:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names1 Scope1 X E1 Ty E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
SN : stmtNames (Scope1::Names1) (declare Ty X E) [] Names''
Ev : evalStmt FE_T EE_T (declare Ty X E1) EE_T' O @
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < SN: case SN.

Subgoal 2.3:

Variables: Scope EE EE_T FE FE_T EE_T' O Names1 Scope1 X E1 Ty E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
Ev : evalStmt FE_T EE_T (declare Ty X E1) EE_T' O @
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SN : exprNames (Scope1::Names1) E []
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < Ev: case Ev.

Subgoal 2.3:

Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SN : exprNames (Scope1::Names1) E []
Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O *
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.3:

Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SN : exprNames (Scope1::Names1) E []
Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O *
EvA : evalExpr FE (Scope::EE) E V EE' O
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 2.3:

Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SN : exprNames (Scope1::Names1) E []
Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O *
EvA : evalExpr FE (Scope::EE) E V EE' O
H4 : is_expr E1
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < C: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvA.

Subgoal 2.3:

Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SN : exprNames (Scope1::Names1) E []
Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O *
EvA : evalExpr FE (Scope::EE) E V EE' O
H4 : is_expr E1
C : ctx_names EE' (Scope1::Names1)
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < case C.

Subgoal 2.3:

Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (Scope1::Names1)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (Scope1::Names1)
Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@
Trans1 : transE (Scope1::Names1) E E1 **
H1 : is_typ Ty
H2 : is_string X
H3 : is_expr E
SN : exprNames (Scope1::Names1) E []
Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O *
EvA : evalExpr FE (Scope::EE) E V (A::ARest) O
H4 : is_expr E1
H5 : forall K I, mem (K, I) A -> mem K Scope1
H6 : forall K, mem K Scope1 -> exists I, mem (K, I) A
H7 : ctx_names ARest Names1
============================
 exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
 < search.

Subgoal 2.4:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (assign X 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @@
SN : stmtNames Names' (assign X E) [] Names''
Ev : evalStmt FE_T EE_T (assign X E1) EE_T' O @
Trans1 : transE Names' E E1 **
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < case IsS.

Subgoal 2.4:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (assign X E) (assign X E1) Names' @@
SN : stmtNames Names' (assign X E) [] Names''
Ev : evalStmt FE_T EE_T (assign X E1) EE_T' O @
Trans1 : transE Names' E E1 **
H1 : is_string X
H2 : is_expr E
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < SN: case SN.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Ev : evalStmt FE_T EE_T (assign X E1) EE_T' O @
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < Ev: case Ev.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
H3 : is_expr E1
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
H3 : is_expr E1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
H3 : is_expr E1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA Ev.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
H3 : is_expr E1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS' : scopes_same EE' EE3
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < SS'': apply scopes_same_symm to SS'.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
H3 : is_expr E1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS' : scopes_same EE' EE3
SS'' : scopes_same EE3 EE'
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < apply scopes_same_replaceScopes_exists to _ _ _ SS'' Ev1.

Subgoal 2.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' B'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (assign X E) (assign X E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string X
H2 : is_expr E
SN : mems X Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : replaceScopes X V EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
H3 : is_expr E1
H4 : is_list (is_list (is_pair is_string is_value)) EE3
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS' : scopes_same EE' EE3
SS'' : scopes_same EE3 EE'
H6 : replaceScopes X V EE' B'
============================
 exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
 < search.

Subgoal 2.5:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (recUpdate Rec Fs 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @@
SN : stmtNames Names' (recUpdate Rec Fs E) [] Names''
Ev : evalStmt FE_T EE_T (recUpdate Rec Fs E1) EE_T' O @
Trans1 : transE Names' E E1 **
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < case IsS.

Subgoal 2.5:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @@
SN : stmtNames Names' (recUpdate Rec Fs E) [] Names''
Ev : evalStmt FE_T EE_T (recUpdate Rec Fs E1) EE_T' O @
Trans1 : transE Names' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < SN: case SN.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Ev : evalStmt FE_T EE_T (recUpdate Rec Fs E1) EE_T' O @
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < Ev: case Ev.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < SS': apply scopes_same_symm to SS.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < L: apply scopes_same_lookupScopes_exists to _ _ SS' Ev1.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
H4 : is_expr E1
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < SS2: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA Ev.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
SS2 : scopes_same EE' EE3
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < SS2': apply scopes_same_symm to SS2.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
SS2 : scopes_same EE' EE3
SS2' : scopes_same EE3 EE'
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < apply scopes_same_replaceScopes_exists to _ _ _ SS2' Ev3.

Subgoal 2.5:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' B'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_string Rec
H2 : is_list is_string Fs
H3 : is_expr E
SN : mems Rec Names''
SN1 : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 V EE3 O *
Ev1 : lookupScopes Rec EE_T (recVal FieldVals)
Ev2 : updateRecFields Fs V FieldVals NewVals
Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T'
EvA : evalExpr FE (Scope::EE) E V EE' O
SS' : scopes_same EE_T (Scope::EE)
L : lookupScopes Rec (Scope::EE) (recVal FieldVals)
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE'
H6 : is_list (is_list (is_pair is_string is_value)) EE3
SS2 : scopes_same EE' EE3
SS2' : scopes_same EE3 EE'
H7 : replaceScopes Rec (recVal NewVals) EE' B'
============================
 exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
 < search.

Subgoal 2.6:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (ifThenElse Cond Th El)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @@
SN : stmtNames Names' (ifThenElse Cond Th El) [] Names''
Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @
Trans1 : transE Names' Cond Cond1 **
Trans2 : transS ([]::Names') Th Th1 NamesTh **
Trans3 : transS ([]::Names') El El1 NamesEl **
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < case IsS.

Subgoal 2.6:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @@
SN : stmtNames Names' (ifThenElse Cond Th El) [] Names''
Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @
Trans1 : transE Names' Cond Cond1 **
Trans2 : transS ([]::Names') Th Th1 NamesTh **
Trans3 : transS ([]::Names') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < SN: case SN.

Subgoal 2.6:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CN TN CtxT FN CtxF N1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond CN
SN1 : stmtNames ([]::Names'') Th TN CtxT
SN2 : stmtNames ([]::Names'') El FN CtxF
SN3 : CN ++ TN = N1
SN4 : N1 ++ FN = []
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < case SN4.

Subgoal 2.6:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CN TN CtxT CtxF
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond CN
SN1 : stmtNames ([]::Names'') Th TN CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
SN3 : CN ++ TN = []
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < case SN3.

Subgoal 2.6:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < Ev: case Ev.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < SS1: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < C1: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvA1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < SS1': apply scopes_same_add_scope to SS1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < C1': apply ctx_names_add_scope to C1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS1' C1' Trans2 _ Ev1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Th EE'1 O3
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < C2: apply evalStmt_ctx_names to _ _ _ _ C1' SN1 EvA2.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Th EE'1 O3
C2 : ctx_names EE'1 CtxT
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply stmtNames_keep_older to _ _ SN1.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxF EE3 O2 Scope1 O3 EE' EE'1 Scope'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] (Scope'::Names'')
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Th EE'1 O3
C2 : ctx_names EE'1 (Scope'::Names'')
H7 : forall X, mem X [] -> mem X Scope'
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < case C2.

Subgoal 2.6.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxF EE3 O2 Scope1 O3 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] (Scope'::Names'')
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Th (A::ARest) O3
H7 : forall X, mem X [] -> mem X Scope'
H8 : forall K I, mem (K, I) A -> mem K Scope'
H9 : forall K, mem K Scope' -> exists I, mem (K, I) A
H10 : ctx_names ARest Names''
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < search.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < SS1: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < C1: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvA1.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < SS1': apply scopes_same_add_scope to SS1.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < C1': apply ctx_names_add_scope to C1.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS1' C1' Trans3 _ Ev1.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') El EE'1 O3
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < C2: apply evalStmt_ctx_names to _ _ _ _ C1' SN2 EvA2.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] CtxF
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') El EE'1 O3
C2 : ctx_names EE'1 CtxF
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < apply stmtNames_keep_older to _ _ SN2.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT EE3 O2 Scope1 O3 EE' EE'1 Scope'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') El EE'1 O3
C2 : ctx_names EE'1 (Scope'::Names'')
H7 : forall X, mem X [] -> mem X Scope'
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < case C2.

Subgoal 2.6.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT EE3 O2 Scope1 O3 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Th Th1 NamesTh **
Trans3 : transS ([]::Names'') El El1 NamesEl **
H1 : is_expr Cond
H2 : is_stmt Th
H3 : is_stmt El
SN : exprNames Names'' Cond []
SN1 : stmtNames ([]::Names'') Th [] CtxT
SN2 : stmtNames ([]::Names'') El [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 *
Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2
H4 : is_expr Cond1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
H6 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE3
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE3)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') El (A::ARest) O3
H7 : forall X, mem X [] -> mem X Scope'
H8 : forall K I, mem (K, I) A -> mem K Scope'
H9 : forall K, mem K Scope' -> exists I, mem (K, I) A
H10 : ctx_names ARest Names''
============================
 exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
 < search.

Subgoal 2.7:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (while Cond Body)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @@
SN : stmtNames Names' (while Cond Body) [] Names''
Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @
Trans1 : transE Names' Cond Cond1 **
Trans2 : transS ([]::Names') Body Body1 Names2 **
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case IsS.

Subgoal 2.7:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @@
SN : stmtNames Names' (while Cond Body) [] Names''
Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @
Trans1 : transE Names' Cond Cond1 **
Trans2 : transS ([]::Names') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < SN: case SN (keep).

Subgoal 2.7:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CN BN CtxB
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond CN
SN2 : stmtNames ([]::Names'') Body BN CtxB
SN3 : CN ++ BN = []
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case SN3.

Subgoal 2.7:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < Ev: case Ev.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < SS1: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < C1: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN1 EvA1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < SS1': apply scopes_same_add_scope to SS1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < C1': apply ctx_names_add_scope to C1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS1' C1' Trans2 _ Ev1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body EE'1 O3
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < C2: apply evalStmt_ctx_names to _ _ _ _ C1' SN2 EvA2.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body EE'1 O3
C2 : ctx_names EE'1 CtxB
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply stmtNames_keep_older to _ _ SN2.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' EE'1 Scope'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body EE'1 O3
C2 : ctx_names EE'1 (Scope'::Names'')
H6 : forall X, mem X [] -> mem X Scope'
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < C: case C2.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply transS_is to _ _ Trans2.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < IsEE4+: apply evalStmt_isCtx to _ _ _ Ev1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4)
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case IsEE4+.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < IsAR+: apply evalStmt_isCtx to _ _ _ EvA2.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
IsAR+ : is_list (is_list (is_pair is_string is_value)) (A::ARest)
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case IsAR+.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < SS2: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 EvA2 Ev1.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
SS2 : scopes_same (A::ARest) (Scope1::EE4)
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < SS2': case SS2.

Subgoal 2.7.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'')
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' Names''
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::Names'')
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest Names''
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same ARest EE4
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case Ctxs.

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A BRest B
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' (B::BRest)
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::(B::BRest))
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same ARest EE4
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply transS_old_scopes to _ _ Trans2.

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A BRest B Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' (B::BRest)
SS1' : scopes_same ([]::EE') ([]::EE2)
C1' : ctx_names ([]::EE') ([]::(B::BRest))
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same ARest EE4
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < C': case C1'.

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A BRest B Scope'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) EE'
SS1 : scopes_same EE' EE2
C1 : ctx_names EE' (B::BRest)
SS1' : scopes_same ([]::EE') ([]::EE2)
EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same ARest EE4
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
C' : forall K I, mem (K, I) [] -> mem K []
C'1 : forall K, mem K [] -> exists I, mem (K, I) []
C'2 : ctx_names EE' (B::BRest)
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case C'2.

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 Scope' ARest A BRest B Scope'1 ARest1 A1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
SS1 : scopes_same (A1::ARest1) EE2
C1 : ctx_names (A1::ARest1) (B::BRest)
SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2)
EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::ARest) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names ARest (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) ARest
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same ARest EE4
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
C' : forall K I, mem (K, I) [] -> mem K []
C'1 : forall K, mem K [] -> exists I, mem (K, I) []
H15 : forall K I, mem (K, I) A1 -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) A1
H17 : ctx_names ARest1 BRest
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case C3 (keep).

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 Scope' A BRest B Scope'1 ARest1 A1 ARest2 A2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 *
Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
SS1 : scopes_same (A1::ARest1) EE2
C1 : ctx_names (A1::ARest1) (B::BRest)
SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2)
EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::(A2::ARest2)) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names (A2::ARest2) (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) EE4
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) (A2::ARest2)
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same (A2::ARest2) EE4
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
C' : forall K I, mem (K, I) [] -> mem K []
C'1 : forall K, mem K [] -> exists I, mem (K, I) []
H15 : forall K I, mem (K, I) A1 -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) A1
H17 : ctx_names ARest1 BRest
H18 : forall K I, mem (K, I) A2 -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A2
H20 : ctx_names ARest2 BRest
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < case SS2'2 (keep).

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 O3 O4 O12 Scope' A BRest B Scope'1 ARest1 A1 ARest2 A2 BRest1 B1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::(B1::BRest1)) O3 *
Ev2 : evalStmt FE_T (B1::BRest1) (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
SS1 : scopes_same (A1::ARest1) EE2
C1 : ctx_names (A1::ARest1) (B::BRest)
SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2)
EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::(A2::ARest2)) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names (A2::ARest2) (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) (A2::ARest2)
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same (A2::ARest2) (B1::BRest1)
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
C' : forall K I, mem (K, I) [] -> mem K []
C'1 : forall K, mem K [] -> exists I, mem (K, I) []
H15 : forall K I, mem (K, I) A1 -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) A1
H17 : ctx_names ARest1 BRest
H18 : forall K I, mem (K, I) A2 -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A2
H20 : ctx_names ARest2 BRest
H21 : forall X V, lookup A2 X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A2 X V
H23 : scopes_same ARest2 BRest1
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply IH_S_E to _ _ _ _ _ _ RFE _ SS2'2 C3 Trans _ Ev2.

Subgoal 2.7.1:

Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 O3 O4 O12 Scope' A BRest B Scope'1 ARest1 A1 ARest2 A2 BRest1 B1 EE'2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@
SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest)
Trans1 : transE (B::BRest) Cond Cond1 **
Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames (B::BRest) Cond []
SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest))
Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 *
Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::(B1::BRest1)) O3 *
Ev2 : evalStmt FE_T (B1::BRest1) (while Cond1 Body1) EE_T' O4 *
Ev3 : O2 ++ O3 = O12
Ev4 : O12 ++ O4 = O
EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2
H3 : is_expr Cond1
H4 : is_list (is_list (is_pair is_string is_value)) EE2
H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1)
SS1 : scopes_same (A1::ARest1) EE2
C1 : ctx_names (A1::ARest1) (B::BRest)
SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2)
EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::(A2::ARest2)) O3
H6 : forall X, mem X [] -> mem X Scope'
C : forall K I, mem (K, I) A -> mem K Scope'
C2 : forall K, mem K Scope' -> exists I, mem (K, I) A
C3 : ctx_names (A2::ARest2) (B::BRest)
H7 : is_stmt Body1
H8 : is_list (is_pair is_string is_value) Scope1
H9 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1)
H10 : is_list (is_pair is_string is_value) A
H11 : is_list (is_list (is_pair is_string is_value)) (A2::ARest2)
SS2' : forall X V, lookup A X V -> lookup Scope1 X V
SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V
SS2'2 : scopes_same (A2::ARest2) (B1::BRest1)
H12 : forall K I, mem (K, I) Scope -> mem K B
H13 : forall K, mem K B -> exists I, mem (K, I) Scope
H14 : ctx_names EE BRest
C' : forall K I, mem (K, I) [] -> mem K []
C'1 : forall K, mem K [] -> exists I, mem (K, I) []
H15 : forall K I, mem (K, I) A1 -> mem K B
H16 : forall K, mem K B -> exists I, mem (K, I) A1
H17 : ctx_names ARest1 BRest
H18 : forall K I, mem (K, I) A2 -> mem K B
H19 : forall K, mem K B -> exists I, mem (K, I) A2
H20 : ctx_names ARest2 BRest
H21 : forall X V, lookup A2 X V -> lookup B1 X V
H22 : forall X V, lookup B1 X V -> lookup A2 X V
H23 : scopes_same ARest2 BRest1
H24 : evalStmt FE (A2::ARest2) (while Cond Body) EE'2 O4
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < search.

Subgoal 2.7.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 falseVal EE_T' O *
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.7.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@
SN : stmtNames Names'' (while Cond Body) [] Names''
Trans1 : transE Names'' Cond Cond1 **
Trans2 : transS ([]::Names'') Body Body1 Names2 **
H1 : is_expr Cond
H2 : is_stmt Body
SN1 : exprNames Names'' Cond []
SN2 : stmtNames ([]::Names'') Body [] CtxB
Ev : evalExpr FE_T EE_T Cond1 falseVal EE_T' O *
H3 : evalExpr FE (Scope::EE) Cond falseVal EE' O
============================
 exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
 < search.

Subgoal 2.8:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (scopeStmt S1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @@
SN : stmtNames Names' (scopeStmt S1) [] Names''
Ev : evalStmt FE_T EE_T (scopeStmt S2) EE_T' O @
Trans1 : transS ([]::Names') S1 S2 Names2 **
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < case IsS.

Subgoal 2.8:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @@
SN : stmtNames Names' (scopeStmt S1) [] Names''
Ev : evalStmt FE_T EE_T (scopeStmt S2) EE_T' O @
Trans1 : transS ([]::Names') S1 S2 Names2 **
H1 : is_stmt S1
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < SN: case SN.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Ev : evalStmt FE_T EE_T (scopeStmt S2) EE_T' O @
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < Ev: case Ev.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O *
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < SS': apply scopes_same_add_scope to SS.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O *
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < C': apply ctx_names_add_scope to Ctxs.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O *
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
C' : ctx_names ([]::(Scope::EE)) ([]::Names'')
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < EvA: apply IH_S to _ _ _ _ _ _ RFE _ SS' C' Trans1 _ Ev.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O *
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
C' : ctx_names ([]::(Scope::EE)) ([]::Names'')
EvA : evalStmt FE ([]::(Scope::EE)) S1 EE' O
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < SS1: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA Ev.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O *
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
C' : ctx_names ([]::(Scope::EE)) ([]::Names'')
EvA : evalStmt FE ([]::(Scope::EE)) S1 EE' O
SS1 : scopes_same EE' (Scope1::EE_T')
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < case SS1.

Subgoal 2.8:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 ARest A
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@
Trans1 : transS ([]::Names'') S1 S2 Names2 **
H1 : is_stmt S1
SN : stmtNames ([]::Names'') S1 [] Ctx1
Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O *
SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T)
C' : ctx_names ([]::(Scope::EE)) ([]::Names'')
EvA : evalStmt FE ([]::(Scope::EE)) S1 (A::ARest) O
H2 : forall X V, lookup A X V -> lookup Scope1 X V
H3 : forall X V, lookup Scope1 X V -> lookup A X V
H4 : scopes_same ARest EE_T'
============================
 exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
 < search.

Subgoal 2.9:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt (printVal 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @@
SN : stmtNames Names' (printVal E) [] Names''
Ev : evalStmt FE_T EE_T (printVal E1) EE_T' O @
Trans1 : transE Names' E E1 **
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < case IsS.

Subgoal 2.9:

Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names'
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names'
Trans : transS Names' (printVal E) (printVal E1) Names' @@
SN : stmtNames Names' (printVal E) [] Names''
Ev : evalStmt FE_T EE_T (printVal E1) EE_T' O @
Trans1 : transE Names' E E1 **
H1 : is_expr E
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < SN: case SN.

Subgoal 2.9:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Ev : evalStmt FE_T EE_T (printVal E1) EE_T' O @
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < Ev: case Ev.

Subgoal 2.9.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E I O2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 (intVal I) EE_T' O2 *
Ev1 : O2 ++ [intVal I] = O
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.9.1:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E I O2 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 (intVal I) EE_T' O2 *
Ev1 : O2 ++ [intVal I] = O
EvA : evalExpr FE (Scope::EE) E (intVal I) EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < search.

Subgoal 2.9.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 trueVal EE_T' O2 *
Ev1 : O2 ++ [trueVal] = O
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.9.2:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 trueVal EE_T' O2 *
Ev1 : O2 ++ [trueVal] = O
EvA : evalExpr FE (Scope::EE) E trueVal EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < search.

Subgoal 2.9.3:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 falseVal EE_T' O2 *
Ev1 : O2 ++ [falseVal] = O
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.9.3:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 falseVal EE_T' O2 *
Ev1 : O2 ++ [falseVal] = O
EvA : evalExpr FE (Scope::EE) E falseVal EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < search.

Subgoal 2.9.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E S1 O2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 (stringVal S1) EE_T' O2 *
Ev1 : O2 ++ [stringVal S1] = O
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 2.9.4:

Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E S1 O2 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names''
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names''
Trans : transS Names'' (printVal E) (printVal E1) Names'' @@
Trans1 : transE Names'' E E1 **
H1 : is_expr E
SN : exprNames Names'' E []
Ev : evalExpr FE_T EE_T E1 (stringVal S1) EE_T' O2 *
Ev1 : O2 ++ [stringVal S1] = O
EvA : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2
============================
 exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
 < search.

Subgoal 2.10:

Variables: T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown I stmt> T Names' @@
SN : stmtNames Names <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' **
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < apply join_is to _ Trans1.

Subgoal 2.10:

Variables: T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown I stmt> T Names' @@
SN : stmtNames Names <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' **
H1 : is_list is_string N
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < IsS_P: apply proj_stmt_is to Trans2 _ _.

Subgoal 2.10:

Variables: T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) Names
Trans : transS Names <unknown I stmt> T Names' @@
SN : stmtNames Names <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join Names N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS Names S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < case Ctxs (keep).

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < SN_P: apply stmtNames_exists to IsS_P IsNames.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P N1 Ctx'
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < Eq: assert N1 = [].

Subgoal 2.10.1:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P N1 Ctx'
============================
 N1 = []
 < IsN1: apply stmtNames_is to _ _ SN_P.

Subgoal 2.10.1:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P N1 Ctx'
IsN1 : is_list is_string N1
============================
 N1 = []
 < IsN1: case IsN1.

Subgoal 2.10.1.1:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P [] Ctx'
============================
 [] = []
 < search.

Subgoal 2.10.1.2:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' T1 H
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P (H::T1) Ctx'
IsN1 : is_string H
IsN2 : is_list is_string T1
============================
 H::T1 = []
 < M': apply proj_stmtNames to Trans2 _ _ _ SN SN_P _ with
         X = H.

Subgoal 2.10.1.2:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' T1 H
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P (H::T1) Ctx'
IsN1 : is_string H
IsN2 : is_list is_string T1
M' : mem H []
============================
 H::T1 = []
 < case M'.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P N1 Ctx'
Eq : N1 = []
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < case Eq.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P [] Ctx'
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < EvP: apply IH_S to _ _ _ _ _ _ RFE _ SS Ctxs Trans3 _ Ev.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P [] Ctx'
EvP : evalStmt FE (Scope::EE) S_P EE' O
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < Names: apply names_exists to IsEE.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P [] Ctx'
EvP : evalStmt FE (Scope::EE) S_P EE' O
Names : names (Scope::EE) N2
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < IsN1: apply names_is to _ Names.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' N2
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P [] Ctx'
EvP : evalStmt FE (Scope::EE) S_P EE' O
Names : names (Scope::EE) N2
IsN1 : is_list is_string N2
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < Pr: apply proj_stmt_other to Trans2 _ _ IsN1.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' N2 S''
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P
Trans3 : transS (B::BRest) S_P T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S_P
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S_P [] Ctx'
EvP : evalStmt FE (Scope::EE) S_P EE' O
Names : names (Scope::EE) N2
IsN1 : is_list is_string N2
Pr : N2 |{stmt}- <unknown I stmt> ~~> S''
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < apply proj_stmt_unique_ctx_names to _ _ _ _ _ _ Trans2 Pr.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N BRest B Ctx' EE' N2 S''
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S''
Trans3 : transS (B::BRest) S'' T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S''
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S'' [] Ctx'
EvP : evalStmt FE (Scope::EE) S'' EE' O
Names : names (Scope::EE) N2
IsN1 : is_list is_string N2
Pr : N2 |{stmt}- <unknown I stmt> ~~> S''
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < apply proj_evalStmt_backward to Pr Names _ _ _ _ Ctxs _ EvP.

Subgoal 2.10:

Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N BRest B Ctx' EE' N2 S'' EE''
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsS : is_stmt <unknown I stmt>
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE)
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) (B::BRest)
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same (Scope::EE) EE_T
Ctxs : ctx_names (Scope::EE) (B::BRest)
Trans : transS (B::BRest) <unknown I stmt> T Names' @@
SN : stmtNames (B::BRest) <unknown I stmt> [] Names''
Ev : evalStmt FE_T EE_T T EE_T' O @
Trans1 : join (B::BRest) N
Trans2 : N |{stmt}- <unknown I stmt> ~~> S''
Trans3 : transS (B::BRest) S'' T Names' **
H1 : is_list is_string N
IsS_P : is_stmt S''
H2 : forall K I, mem (K, I) Scope -> mem K B
H3 : forall K, mem K B -> exists I, mem (K, I) Scope
H4 : ctx_names EE BRest
SN_P : stmtNames (B::BRest) S'' [] Ctx'
EvP : evalStmt FE (Scope::EE) S'' EE' O
Names : names (Scope::EE) N2
IsN1 : is_list is_string N2
Pr : N2 |{stmt}- <unknown I stmt> ~~> S''
H5 : evalStmt FE (Scope::EE) <unknown I stmt> EE'' O
H6 : scopes_same EE' EE''
============================
 exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
 < search.

Subgoal 3:

Variables: A T Names EE EE_T FE FE_T V EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsA : is_args A
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names A T @@
AN : argsNames Names A []
Ev : evalArgs FE_T EE_T T V EE_T' O @
============================
 exists EE', evalArgs FE EE A V EE' O
 < Trans: case Trans (keep).

Subgoal 3.1:

Variables: Names EE EE_T FE FE_T V EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names nilArgs nilArgs @@
AN : argsNames Names nilArgs []
Ev : evalArgs FE_T EE_T nilArgs V EE_T' O @
============================
 exists EE', evalArgs FE EE nilArgs V EE' O
 < case Ev.

Subgoal 3.1:

Variables: Names EE FE FE_T EE_T'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsA : is_args nilArgs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transA Names nilArgs nilArgs @@
AN : argsNames Names nilArgs []
============================
 exists EE', evalArgs FE EE nilArgs [] EE' []
 < search.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsA : is_args (consArgs E A1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
AN : argsNames Names (consArgs E A1) []
Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
============================
 exists EE', evalArgs FE EE (consArgs E A1) V EE' O
 < case IsA.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
AN : argsNames Names (consArgs E A1) []
Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
============================
 exists EE', evalArgs FE EE (consArgs E A1) V EE' O
 < AN: case AN.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E EN AN
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E EN
AN1 : argsNames Names A1 AN
AN2 : EN ++ AN = []
============================
 exists EE', evalArgs FE EE (consArgs E A1) V EE' O
 < case AN2.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
============================
 exists EE', evalArgs FE EE (consArgs E A1) V EE' O
 < Ev: case Ev.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_expr E1
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
H6 : ctx_names EE' Names
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < EvA2: apply IH_A to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 3.2:

Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@
Trans1 : transE Names E E1 **
Trans2 : transA Names A1 A2 **
H1 : is_expr E
H2 : is_args A1
AN : exprNames Names E []
AN1 : argsNames Names A1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H3 : is_list (is_list (is_pair is_string is_value)) EE'
H4 : is_expr E1
H5 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
H6 : ctx_names EE' Names
EvA2 : evalArgs FE EE' A1 VRest EE'1 O3
============================
 exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
 < search.

Subgoal 4:

Variables: RF T Names EE EE_T FE FE_T V EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsRF : is_recFieldExprs RF
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names RF T @@
RFN : recFieldNames Names RF []
Ev : evalRecFields FE_T EE_T T V EE_T' O @
============================
 exists EE', evalRecFields FE EE RF V EE' O
 < Trans: case Trans (keep).

Subgoal 4.1:

Variables: Names EE EE_T FE FE_T V EE_T' O
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names nilRecFieldExprs nilRecFieldExprs @@
RFN : recFieldNames Names nilRecFieldExprs []
Ev : evalRecFields FE_T EE_T nilRecFieldExprs V EE_T' O @
============================
 exists EE', evalRecFields FE EE nilRecFieldExprs V EE' O
 < case Ev.

Subgoal 4.1:

Variables: Names EE FE FE_T EE_T'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsRF : is_recFieldExprs nilRecFieldExprs
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T'
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T'
Ctxs : ctx_names EE Names
Trans : transRF Names nilRecFieldExprs nilRecFieldExprs @@
RFN : recFieldNames Names nilRecFieldExprs []
============================
 exists EE', evalRecFields FE EE nilRecFieldExprs [] EE' []
 < search.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' O
IsRF : is_recFieldExprs (consRecFieldExprs F E RF1)
IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
RFN : recFieldNames Names (consRecFieldExprs F E RF1) []
Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
============================
 exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
 < case IsRF.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
RFN : recFieldNames Names (consRecFieldExprs F E RF1) []
Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
============================
 exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
 < RFN: case RFN.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E EN RN
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E EN
RFN1 : recFieldNames Names RF1 RN
RFN2 : EN ++ RN = []
============================
 exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
 < case RFN2.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
============================
 exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
 < Ev: case Ev.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < apply evalExpr_isCtx to _ _ _ EvA1.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE'
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < apply transE_is to _ _ Trans1.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E1
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < apply evalExpr_isCtx to _ _ _ Ev.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE'
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
H7 : ctx_names EE' Names
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < EvA2: apply IH_RF to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1.

Subgoal 4.2:

Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' EE'1
IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] ->
           evalExpr FE_T EE_T T V EE_T' O * -> exists EE',
             evalExpr FE EE E V EE' O
IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ->
           stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE',
             evalStmt FE (Scope::EE) S EE' O
IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
           is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
           is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
           scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] ->
           evalArgs FE_T EE_T T V EE_T' O * -> exists EE',
             evalArgs FE EE A V EE' O
IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
            is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
            is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
            scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] ->
            evalRecFields FE_T EE_T T V EE_T' O * -> exists EE',
              evalRecFields FE EE RF V EE' O
IH_E : forall E T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] ->
         evalExpr FE_T EE_T T V EE_T' O @ -> exists EE',
           evalExpr FE EE E V EE' O
IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** ->
         stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE',
           evalStmt FE (Scope::EE) S EE' O
IH_A : forall A T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
         is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
         is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
         scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] ->
         evalArgs FE_T EE_T T V EE_T' O @ -> exists EE',
           evalArgs FE EE A V EE' O
IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' 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_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ->
          is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T ->
          is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE ->
          scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] ->
          evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE',
            evalRecFields FE EE RF V EE' 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
IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T
IsEE : is_list (is_list (is_pair is_string is_value)) EE
IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T
IsNames : is_list (is_list is_string) Names
RFE : rel_FE FE FE_T
ENFE : emptyNames_FE FE
SS : scopes_same EE EE_T
Ctxs : ctx_names EE Names
Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@
Trans1 : transE Names E E1 **
Trans2 : transRF Names RF1 RF2 **
H1 : is_string F
H2 : is_expr E
H3 : is_recFieldExprs RF1
RFN : exprNames Names E []
RFN1 : recFieldNames Names RF1 []
Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 *
Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 *
Ev2 : O2 ++ O3 = O
EvA1 : evalExpr FE EE E V1 EE' O2
H4 : is_list (is_list (is_pair is_string is_value)) EE'
H5 : is_expr E1
H6 : is_list (is_list (is_pair is_string is_value)) EE3
SS' : scopes_same EE' EE3
H7 : ctx_names EE' Names
EvA2 : evalRecFields FE EE' RF1 VRest EE'1 O3
============================
 exists EE',
   evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
 < search.

Proof completed.
 < Extensible_Theorem
      trans_getFunEvalInfo_backward : forall F F_T Name RetVar RVVal PNames Body_T,
         IsF : is_fun F ->
         Trans : transF F F_T ->
         GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
         exists Body,
           getFunEvalInfo F Name RetVar RVVal PNames Body
      on Trans.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body_T PTys Names Names1 Body1 Params InitVal RetVar1 RetTy F1 Body
IH : forall F F_T Name RetVar RVVal PNames Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
       exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body
IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body)
Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body) (fun F1 RetTy RetVar1 InitVal Params Body1) @
GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body_T
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar1::Names] Body Body1 Names1
============================
 exists Body1,
   getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body) Name RetVar RVVal PNames Body1
 < GFEI: case GFEI.

Subgoal 1:

Variables: Name RetVar RVVal PNames Body_T PTys Names Names1 Params RetTy Body
IH : forall F F_T Name RetVar RVVal PNames Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
       exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body
IsF : is_fun (fun Name RetTy RetVar RVVal Params Body)
Trans : transF (fun Name RetTy RetVar RVVal Params Body) (fun Name RetTy RetVar RVVal Params Body_T) @
Trans1 : paramTys Params PTys
Trans2 : domain PTys Names
Trans3 : transS [RetVar::Names] Body Body_T Names1
GFEI : paramNames Params PNames
============================
 exists Body1,
   getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body) Name RetVar RVVal PNames Body1
 < search.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body_T F_P
IH : forall F F_T Name RetVar RVVal PNames Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
       exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
============================
 exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
 < apply proj_fun_is to Trans1 _.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body_T F_P
IH : forall F F_T Name RetVar RVVal PNames Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
       exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
H1 : is_fun F_P
============================
 exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
 < G: apply IH to _ Trans2 GFEI.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body_T F_P Body
IH : forall F F_T Name RetVar RVVal PNames Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
       exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
H1 : is_fun F_P
G : getFunEvalInfo F_P Name RetVar RVVal PNames Body
============================
 exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
 < apply proj_getFunEvalInfo_back to Trans1 _ G.

Subgoal 2:

Variables: F_T Name RetVar RVVal PNames Body_T F_P Body
IH : forall F F_T Name RetVar RVVal PNames Body_T,
       is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ->
       exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body
IsF : is_fun <unknown I fun>
Trans : transF <unknown I fun> F_T @
GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
Trans1 : |{fun}- <unknown I fun> ~~> F_P
Trans2 : transF F_P F_T *
H1 : is_fun F_P
G : getFunEvalInfo F_P Name RetVar RVVal PNames Body
H2 : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
============================
 exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
 < search.

Proof completed.
 < Theorem trans_getFunEvalCtx_backward :
     forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE.

============================
 forall Fs Fs_T FE_T,
   is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs_T FE_T -> exists FE,
     getFunEvalCtx Fs FE
 < induction on 2.

IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
============================
 forall Fs Fs_T FE_T,
   is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs_T FE_T -> exists FE,
     getFunEvalCtx Fs FE
 < intros IsFs Trans GFEI.

Variables: Fs Fs_T FE_T
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
IsFs : is_list is_fun Fs
Trans : transFuns Fs Fs_T @
GFEI : getFunEvalCtx Fs_T FE_T
============================
 exists FE, getFunEvalCtx Fs FE
 < Trans: case Trans.

Subgoal 1:

Variables: FE_T
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
IsFs : is_list is_fun []
GFEI : getFunEvalCtx [] FE_T
============================
 exists FE, getFunEvalCtx [] FE
 < case GFEI.

Subgoal 1:

IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
IsFs : is_list is_fun []
============================
 exists FE, getFunEvalCtx [] FE
 < search.

Subgoal 2:

Variables: FE_T Rest1 F1 Rest F
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
IsFs : is_list is_fun (F::Rest)
GFEI : getFunEvalCtx (F1::Rest1) FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
============================
 exists FE, getFunEvalCtx (F::Rest) FE
 < case IsFs.

Subgoal 2:

Variables: FE_T Rest1 F1 Rest F
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
GFEI : getFunEvalCtx (F1::Rest1) FE_T
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
============================
 exists FE, getFunEvalCtx (F::Rest) FE
 < G: case GFEI.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
G : getFunEvalInfo F1 FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest1 CRest
============================
 exists FE, getFunEvalCtx (F::Rest) FE
 < apply IH to _ Trans1 G1.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
G : getFunEvalInfo F1 FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest1 CRest
H3 : getFunEvalCtx Rest FE
============================
 exists FE, getFunEvalCtx (F::Rest) FE
 < apply trans_getFunEvalInfo_backward to _ Trans G.

Subgoal 2:

Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE Body1
IH : forall Fs Fs_T FE_T,
       is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE,
         getFunEvalCtx Fs FE
Trans : transF F F1
Trans1 : transFuns Rest Rest1 *
H1 : is_fun F
H2 : is_list is_fun Rest
G : getFunEvalInfo F1 FName RetVar RVVal PNames Body
G1 : getFunEvalCtx Rest1 CRest
H3 : getFunEvalCtx Rest FE
H4 : getFunEvalInfo F FName RetVar RVVal PNames Body1
============================
 exists FE, getFunEvalCtx (F::Rest) FE
 < search.

Proof completed.
 < Theorem getFunEvalCtx_funsEmptyNames_emptyNames_FE :
     forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE -> funsEmptyNames Fs -> emptyNames_FE FE.

============================
 forall Fs FE,
   is_list is_fun Fs -> getFunEvalCtx Fs FE -> funsEmptyNames Fs -> emptyNames_FE FE
 < induction on 2.

IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
============================
 forall Fs FE,
   is_list is_fun Fs -> getFunEvalCtx Fs FE @ -> funsEmptyNames Fs -> emptyNames_FE FE
 < intros IsFs GFEC FEN.

Variables: Fs FE
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
IsFs : is_list is_fun Fs
GFEC : getFunEvalCtx Fs FE @
FEN : funsEmptyNames Fs
============================
 emptyNames_FE FE
 < GFEC: case GFEC.

Subgoal 1:

IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
IsFs : is_list is_fun []
FEN : funsEmptyNames []
============================
 emptyNames_FE []
 < unfold .

Subgoal 1:

IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
IsFs : is_list is_fun []
FEN : funsEmptyNames []
============================
 forall F RetVar RVVal Params Body,
   mem (F, (RetVar, (RVVal, (Params, Body)))) [] -> exists EndNames,
     stmtNames [RetVar::Params] Body [] EndNames
 < intros M.

Subgoal 1:

Variables: F RetVar RVVal Params Body
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
IsFs : is_list is_fun []
FEN : funsEmptyNames []
M : mem (F, (RetVar, (RVVal, (Params, Body)))) []
============================
 exists EndNames, stmtNames [RetVar::Params] Body [] EndNames
 < case M.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
IsFs : is_list is_fun (F::FRest)
FEN : funsEmptyNames (F::FRest)
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
============================
 emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
 < FEN: case FEN.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
IsFs : is_list is_fun (F::FRest)
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN : funEmptyNames F
FEN1 : funsEmptyNames FRest
============================
 emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
 < case IsFs.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN : funEmptyNames F
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
============================
 emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
 < EN: apply IH to _ GFEC1 FEN1.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN : funEmptyNames F
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : emptyNames_FE CRest
============================
 emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
 < EN: case EN.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN : funEmptyNames F
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
============================
 emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
 < FEN: case FEN.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
============================
 emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
 < unfold .

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
============================
 forall F RetVar1 RVVal1 Params Body1,
   mem (F, (RetVar1, (RVVal1, (Params, Body1)))) ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ->
   exists EndNames, stmtNames [RetVar1::Params] Body1 [] EndNames
 < intros M.

Subgoal 2:

Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut F1 RetVar2 RVVal2 Params1 Body2
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
M : mem (F1, (RetVar2, (RVVal2, (Params1, Body2)))) ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
============================
 exists EndNames, stmtNames [RetVar2::Params1] Body2 [] EndNames
 < M: case M.

Subgoal 2.1:

Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
============================
 exists EndNames, stmtNames [RetVar::PNames] Body [] EndNames
 < apply getFunEvalInfo_unique to _ GFEC FEN.

Subgoal 2.1:

Variables: CRest FRest F Name RetVar1 RVVal1 Params Body1 NamesOut
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
============================
 exists EndNames, stmtNames [RetVar1::Params] Body1 [] EndNames
 < search.

Subgoal 2.2:

Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut F1 RetVar2 RVVal2 Params1 Body2
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
M : mem (F1, (RetVar2, (RVVal2, (Params1, Body2)))) CRest
============================
 exists EndNames, stmtNames [RetVar2::Params1] Body2 [] EndNames
 < apply EN to M.

Subgoal 2.2:

Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut F1 RetVar2 RVVal2 Params1 Body2 EndNames
IH : forall Fs FE,
       is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE
GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body
GFEC1 : getFunEvalCtx FRest CRest *
FEN1 : funsEmptyNames FRest
H1 : is_fun F
H2 : is_list is_fun FRest
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1
FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut
M : mem (F1, (RetVar2, (RVVal2, (Params1, Body2)))) CRest
H3 : stmtNames [RetVar2::Params1] Body2 [] EndNames
============================
 exists EndNames, stmtNames [RetVar2::Params1] Body2 [] EndNames
 < search.

Proof completed.
 < Extensible_Theorem
      trans_evalProgram_backward : forall P P_T A O,
         IsP : is_program P ->
         IsA : is_list is_value A ->
         PEN : programEmptyNames P ->
         Trans : transP P P_T ->
         Ev : evalProgram A P_T O ->
         evalProgram A P O
      on Trans.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program (program Funs Main)
IsA : is_list is_value A
PEN : programEmptyNames (program Funs Main)
Trans : transP (program Funs Main) (program Funs1 Main1) @
Ev : evalProgram A (program Funs1 Main1) O
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
============================
 evalProgram A (program Funs Main) O
 < case IsP.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
PEN : programEmptyNames (program Funs Main)
Trans : transP (program Funs Main) (program Funs1 Main1) @
Ev : evalProgram A (program Funs1 Main1) O
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
============================
 evalProgram A (program Funs Main) O
 < Ev: case Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
PEN : programEmptyNames (program Funs Main)
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
============================
 evalProgram A (program Funs Main) O
 < PEN: case PEN.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
============================
 evalProgram A (program Funs Main) O
 < apply transFuns_is to _ Trans1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
============================
 evalProgram A (program Funs Main) O
 < apply transF_is to _ Trans2.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
============================
 evalProgram A (program Funs Main) O
 < GFEC: apply trans_getFunEvalCtx_backward to _ Trans1 Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
============================
 evalProgram A (program Funs Main) O
 < GFEI: apply trans_getFunEvalInfo_backward to _ Trans2 Ev1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
============================
 evalProgram A (program Funs Main) O
 < RFE: apply trans_getFunEvalCtx_rel_FE to _ Trans1 GFEC Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
============================
 evalProgram A (program Funs Main) O
 < Tr: apply trans_getFunEvalInfo_rel to _ Trans2 GFEI Ev1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
============================
 evalProgram A (program Funs Main) O
 < RFE': assert rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx).

Subgoal 1.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
============================
 rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
 < unfold .

Subgoal 1.1.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
============================
 forall F RetVar1 RVVal PNames1 Body2,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) ->
   exists Body_T Names,
     lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\
     transS [RetVar1::PNames1] Body2 Body_T Names
 < intros L.

Subgoal 1.1.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2)))
============================
 exists Body_T Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < L: case L.

Subgoal 1.1.1.1:

Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE N F RetVar1 RVVal PNames1 Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body
Ev2 : zip PNames1 A InitEnv
Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body2
RFE : rel_FE FE FCtx
Tr : transS [RetVar1::PNames1] Body2 Body N
============================
 exists Body_T Names,
   lookup ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < search.

Subgoal 1.1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
L : MainName = F -> false
L1 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2)))
============================
 exists Body_T Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < R: case RFE.

Subgoal 1.1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
Tr : transS [RetVar::PNames] Body1 Body N
L : MainName = F -> false
L1 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2)))
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists Body_T Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < apply R to L1.

Subgoal 1.1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2 Body_T Names
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
Tr : transS [RetVar::PNames] Body1 Body N
L : MainName = F -> false
L1 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2)))
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
H5 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T)))
H6 : transS [RetVar1::PNames1] Body2 Body_T Names
============================
 exists Body_T Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < search.

Subgoal 1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
============================
 forall F RetVar1 RVVal PNames1 Body_T,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) ->
   exists Body2 Names,
     lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\
     transS [RetVar1::PNames1] Body2 Body_T Names
 < intros L.

Subgoal 1.1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T)))
============================
 exists Body2 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < L: case L.

Subgoal 1.1.2.1:

Variables: A O Main1 Funs1 Main Funs FCtx InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T
Ev2 : zip PNames1 A InitEnv
Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body_T))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body_T EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar1::PNames1] Body1 Body_T N
============================
 exists Body2 Names,
   lookup ((F, (RetVar1, (RVVal, (PNames1, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < search.

Subgoal 1.1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
L : MainName = F -> false
L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T)))
============================
 exists Body2 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < R: case RFE.

Subgoal 1.1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
Tr : transS [RetVar::PNames] Body1 Body N
L : MainName = F -> false
L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T)))
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
============================
 exists Body2 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < apply R1 to L1.

Subgoal 1.1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T Body2 Names
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
Tr : transS [RetVar::PNames] Body1 Body N
L : MainName = F -> false
L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T)))
R : forall F RetVar RVVal PNames Body,
      lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names,
        lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\
        transS [RetVar::PNames] Body Body_T Names
R1 : forall F RetVar RVVal PNames Body_T,
       lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names,
         lookup FE F (RetVar, (RVVal, (PNames, Body))) /\
         transS [RetVar::PNames] Body Body_T Names
H5 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2)))
H6 : transS [RetVar1::PNames1] Body2 Body_T Names
============================
 exists Body2 Names,
   lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\
   transS [RetVar1::PNames1] Body2 Body_T Names
 < search.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
============================
 evalProgram A (program Funs Main) O
 < EN: apply getFunEvalCtx_funsEmptyNames_emptyNames_FE to _ GFEC PEN.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
============================
 evalProgram A (program Funs Main) O
 < EN': assert emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE).

Subgoal 1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
============================
 emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
 < unfold .

Subgoal 1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
============================
 forall F RetVar1 RVVal Params Body,
   mem (F, (RetVar1, (RVVal, (Params, Body)))) ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ->
   exists EndNames, stmtNames [RetVar1::Params] Body [] EndNames
 < intros M.

Subgoal 1.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
============================
 exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
 < M: case M.

Subgoal 1.2.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
============================
 exists EndNames, stmtNames [RetVar::PNames] Body1 [] EndNames
 < FEN: case PEN1.

Subgoal 1.2.1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N Name RetVar2 RVVal1 Params1 Body3 NamesOut
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
FEN : getFunEvalInfo Main Name RetVar2 RVVal1 Params1 Body3
FEN1 : stmtNames [RetVar2::Params1] Body3 [] NamesOut
============================
 exists EndNames, stmtNames [RetVar::PNames] Body1 [] EndNames
 < apply getFunEvalInfo_unique to _ GFEI FEN.

Subgoal 1.2.1:

Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE N Name RetVar2 RVVal1 Params1 Body3 NamesOut
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 Name RetVar2 RVVal1 Params1 Body
Ev2 : zip Params1 A InitEnv
Ev3 : evalStmt ((Name, (RetVar2, (RVVal1, (Params1, Body))))::FCtx) [(RetVar2, RVVal1)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main Name RetVar2 RVVal1 Params1 Body3
RFE : rel_FE FE FCtx
Tr : transS [RetVar2::Params1] Body3 Body N
RFE' : rel_FE ((Name, (RetVar2, (RVVal1, (Params1, Body3))))::FE) ((Name, (RetVar2, (RVVal1, (Params1, Body))))::FCtx)
EN : emptyNames_FE FE
FEN : getFunEvalInfo Main Name RetVar2 RVVal1 Params1 Body3
FEN1 : stmtNames [RetVar2::Params1] Body3 [] NamesOut
============================
 exists EndNames, stmtNames [RetVar2::Params1] Body3 [] EndNames
 < search.

Subgoal 1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) FE
============================
 exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
 < EN: case EN.

Subgoal 1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) FE
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
============================
 exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
 < apply EN to M.

Subgoal 1.2.2:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2 EndNames
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) FE
EN : forall F RetVar RVVal Params Body,
       mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames,
         stmtNames [RetVar::Params] Body [] EndNames
H5 : stmtNames [RetVar1::Params] Body2 [] EndNames
============================
 exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
 < search.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
============================
 evalProgram A (program Funs Main) O
 < apply getFunEvalInfo_is to _ Ev1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
============================
 evalProgram A (program Funs Main) O
 < Z: assert zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv).

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
============================
 evalProgram A (program Funs Main) O
 < IsIE: apply zip_is to _ _ Z.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
============================
 evalProgram A (program Funs Main) O
 < apply getFunEvalCtx_is to _ Ev.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
============================
 evalProgram A (program Funs Main) O
 < IsInitEnv: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv].

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
============================
 evalProgram A (program Funs Main) O
 < SS: apply scopes_same_reflexive to IsInitEnv.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
============================
 evalProgram A (program Funs Main) O
 < Ctxs: apply zip_ctx_names to Z.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
PEN1 : funEmptyNames Main
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
============================
 evalProgram A (program Funs Main) O
 < FEN: case PEN1.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N Name RetVar1 RVVal Params Body2 NamesOut
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
FEN : getFunEvalInfo Main Name RetVar1 RVVal Params Body2
FEN1 : stmtNames [RetVar1::Params] Body2 [] NamesOut
============================
 evalProgram A (program Funs Main) O
 < apply getFunEvalInfo_unique to _ FEN GFEI.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut
============================
 evalProgram A (program Funs Main) O
 < apply getFunEvalCtx_is to _ GFEC.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut
H11 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
============================
 evalProgram A (program Funs Main) O
 < apply getFunEvalInfo_is to _ GFEI.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut
H11 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
H12 : is_string MainName
H13 : is_string RetVar
H14 : is_value RetVal
H15 : is_list is_string PNames
H16 : is_stmt Body1
============================
 evalProgram A (program Funs Main) O
 < apply trans_evalStmt_backward to _ _ _ _ _ _ RFE' EN' SS Ctxs Tr FEN1 Ev3.

Subgoal 1:

Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut EE'
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsA : is_list is_value A
Trans : transP (program Funs Main) (program Funs1 Main1) @
Trans1 : transFuns Funs Funs1
Trans2 : transF Main Main1
H1 : is_list is_fun Funs
H2 : is_fun Main
Ev : getFunEvalCtx Funs1 FCtx
Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body
Ev2 : zip PNames A InitEnv
Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O
PEN : funsEmptyNames Funs
H3 : is_list is_fun Funs1
H4 : is_fun Main1
GFEC : getFunEvalCtx Funs FE
GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
RFE : rel_FE FE FCtx
Tr : transS [RetVar::PNames] Body1 Body N
RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
EN : emptyNames_FE FE
EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
H5 : is_string MainName
H6 : is_string RetVar
H7 : is_value RetVal
H8 : is_list is_string PNames
H9 : is_stmt Body
Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv)
IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv)
H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx
IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]
SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv]
Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames]
FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1
FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut
H11 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE
H12 : is_string MainName
H13 : is_string RetVar
H14 : is_value RetVal
H15 : is_list is_string PNames
H16 : is_stmt Body1
H17 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) [(RetVar, RetVal)::InitEnv] Body1 EE' O
============================
 evalProgram A (program Funs Main) O
 < search.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program <unknown I program>
IsA : is_list is_value A
PEN : programEmptyNames <unknown I program>
Trans : transP <unknown I program> P_T @
Ev : evalProgram A P_T O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
============================
 evalProgram A <unknown I program> O
 < PEN: case PEN.

Subgoal 2:

Variables: P_T A O P_P P_P1
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A P_T O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
PEN : |{program}- <unknown I program> ~~> P_P1
PEN1 : programEmptyNames P_P1
============================
 evalProgram A <unknown I program> O
 < apply proj_program_unique to PEN Trans1 _.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A P_T O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
PEN : |{program}- <unknown I program> ~~> P_P
PEN1 : programEmptyNames P_P
============================
 evalProgram A <unknown I program> O
 < apply proj_program_is to PEN _.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A P_T O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
PEN : |{program}- <unknown I program> ~~> P_P
PEN1 : programEmptyNames P_P
H1 : is_program P_P
============================
 evalProgram A <unknown I program> O
 < EvP: apply IH to _ _ PEN1 Trans2 Ev.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A P_T O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
PEN : |{program}- <unknown I program> ~~> P_P
PEN1 : programEmptyNames P_P
H1 : is_program P_P
EvP : evalProgram A P_P O
============================
 evalProgram A <unknown I program> O
 < apply proj_evalProgram_back to PEN _ _ EvP.

Subgoal 2:

Variables: P_T A O P_P
IH : forall P P_T A O,
       is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * ->
       evalProgram A P_T O -> evalProgram A P O
IsP : is_program <unknown I program>
IsA : is_list is_value A
Trans : transP <unknown I program> P_T @
Ev : evalProgram A P_T O
Trans1 : |{program}- <unknown I program> ~~> P_P
Trans2 : transP P_P P_T *
PEN : |{program}- <unknown I program> ~~> P_P
PEN1 : programEmptyNames P_P
H1 : is_program P_P
EvP : evalProgram A P_P O
H2 : evalProgram A <unknown I program> O
============================
 evalProgram A <unknown I program> O
 < search.

Proof completed.
Back to example home